存储过程

 

存储过程创建语法:

create or replace procedure 存储过程名(param1 in typeparam2 out type
as
变量1 类型(值范围);
变量2 类型(值范围);
Begin
    Select count(*) into
变量1 from A where列名=param1
    If (
判断条件) then
       Select
列名 into 变量2 from A where列名=param1
       Dbms_output
Put_line(‘打印信息’);
    Elsif (
判断条件) then
       Dbms_output
Put_line(‘打印信息’);
    Else
       Raise
异常名(NO_DATA_FOUND;
    End if;
Exception
    When others then
       Rollback;
End;


注意事项:

1
  存储过程参数不带取值范围,in表示传入,out表示输出

2
  变量带取值范围,后面接分号

3
  在判断语句前最好先用count*)函数判断是否存在该条操作记录

4
  select 。。。into。。。给变量赋值

5
  在代码中抛异常用 raise+异常名


命名的异常

命名的系统异常                              产生原因

ACCESS_INTO_NULL                   
未定义对象

CASE_NOT_FOUND                     CASE
中若未包含相应的 WHEN ,并且没有设置 ELSE

COLLECTION_IS_NULL               
集合元素未初始化

CURSER_ALREADY_OPEN            
游标已经打开

DUP_VAL_ON_INDEX                  
唯一索引对应的列上有重复的值

INVALID_CURSOR                       
在不合法的游标上进行操作

INVALID_NUMBER                      
内嵌的 SQL 语句不能将字符转换为数字

NO_DATA_FOUND                       
使用 select into 未返回行,或应用索引表未初始化的 

TOO_MANY_ROWS                     
执行 select into 时,结果集超过一行

ZERO_DIVIDE                             
除数为 0

SUBSCRIPT_BEYOND_COUNT    
元素下标超过嵌套表或 VARRAY 的最大值

SUBSCRIPT_OUTSIDE_LIMIT      
使用嵌套表或 VARRAY 时,将下标指定为负数

VALUE_ERROR                            
赋值时,变量长度不足以容纳实际数据

LOGIN_DENIED                           PL/SQL
应用程序连接到 oracle 数据库时,提供了不 正确的用户名或密码

NOT_LOGGED_ON                       PL/SQL
应用程序在没有连接 oralce 数据库的情况下 访问数据

PROGRAM_ERROR                       PL/SQL
内部问题,可能需要重装数据字典& pl./SQL 系统包

ROWTYPE_MISMATCH               
宿主游标变量与 PL/SQL 游标变量的返回类型不兼容

SELF_IS_NULL                            
使用对象类型时,在 null 对象上调用对象方法

STORAGE_ERROR                       
运行 PL/SQL 时,超出内存空间

SYS_INVALID_ID                        
无效的 ROWID 字符串

TIMEOUT_ON_RESOURCE           Oracle
在等待资源时超时  

 

发布了8 篇原创文章 · 获赞 0 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章