ORACLE 存储过程提高

1.SQLCODE和SQLERRM

2.%TYPE和%ROWTYPE的使用

3.sql%rowcount的作用

 

1.SQLCODE和SQLERRM 

SQLCode:数据库操作的返回码,其中

0--成功;
-1--失败;
100--没有检索到数据。
+1--用户自定义异常

sqlerrm函数返回指定错误代码的错误信息。 

在一个内在的异常中,SQLCODE返回Oracle错误的序号,而SQLERRM返回的是相应的错误消息,错误消息首先显示的是错误代码。

SQLCODE返回的是负数,除非Oracle的错误为“ORA-01403:NO DATA FOUND”(译:ORA-01403:未找到数据),当Oracle错误为“ORA-01403:NO DATA FOUND”时,其对应的SQLCODE为+100。对于用户自定义的异常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception。  
一个Oracle的错误消息最多只能包含512个字节的错误代码。如果没有异常被触发,则SQLCODE返回0,SQLERRM返回“ORA-0000:normal, successful completion”。 

sqlerrm如何使用?
sqlcode和sqlerrm是不能直接在sql语句中使用,必须先将其赋给变量后,才能在sql语句中使用,如下:

  d_trans_error               NUMBER

   d_trans_error_msg     VARCHAR2(512)

   d_trans_error := SQLCODE;
   d_trans_error_msg := SUBSTR(SQLERRM,1,512);

 2.%TYPE和%ROWTYPE的使用

 %TYPE说明
为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,就只能采用这种方法定义变量的数据类型。

MSG VARCHAR2(20) :='小红'; 
STRSQL MSG%TYPE;

2 %ROWTYPE说明
如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。

   为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。

   一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。
比如游标

type cursor_type is ref cursor; 
table_cursor cursor_type; 
v_import_table tbl_name%rowtype; 
begin 
open table_cursor for select * from tbl_name; 
loop 
fetch table_cursor into v_import_table; 
exit when tbl_cursor%notfound; 
……….. 
end loop; 
close table_cursor; 
或者游标可以这样定义: 
cusor table_ cusor is select * from tbl_name 
3.游标的4个 属性 
%isopen:游标打开时返回true 
%found 游标结果集有数据返回true 
%notfound 游标结果集不存在数据时为true 
%rowcount 返回已提取数据的实际行数 

3.sql%rowcount的作用

sql%rowcount用于记录修改的条数,必须放在一个更新或者删除等修改类语句后面执行,select语句用于查询的话无法使用,

当你执行多条修改语句时,按照sql%rowcount 之前执行的最后一条语句修改数为准。

 

posted @ 2019-07-20 16:23  Rooker  阅读(1472)  评论(0编辑  收藏  举报