您的位置:首页 > 数据库

PL/sql学习

2009-12-17 16:53 169 查看
1、PLSQL块中直接嵌入SQL的SELECT语句取数据时,必须添加Exception,否则如果是多行数据

或者没有数据,就会报TOO_MANY_ROWS或 NO_DATA_FOUND错误并最终传递到环境中

WHERE子句中使用变量时须注意变量名不能与列名相同,否则会触发TOO_MANY_ROWS例外

2、SQL游标属性(SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT,SQL%ISOPEN):根据是否有作用行判断

3、两种CASE控制结构

a、当条件是单一条件并且是相等条件时运用

CASE selector

WHEN condition THEN exp1;

WHEN condition THEN exp2;

ELSE EXP3;

END CASE;

b、多种不同条件判断

CASE

WHEN condition1 THEN exp1;

WHEN condition1 THEN exp2;

ELSE EXP3

END CASE;

4、显式游标

可以使用显式游标更新或删除数据。这时,显式游标必须要带有For Update子句

cursor cursor_name is select ... for update [of column] [nowait];

update table_name set column = ... where current of cursor_name;

delete table_name where current of cursor_name;

5、游标FOR循环

FOR record_name IN cursor_name/子查询 LOOP

END LOOP;

6、非预定义例外及自定义例外

EG:

DECLARE

e_integrity EXCEPTION;

PRAGMA EXCEPTION_INTI(e_integrity, -2291);

e_no_employee EXCEPTION;

BEGIN

UPDATE emp SET deptno=&dno WHERE empno=&eno;

IF SQL%NOTFOUND THEN

RAISE e_no_employee;

END IF;

EXCEPTION

WHEN e_integrity THEN

dbms_output.put_line('该部门不存在');

WHEN e_no_employee THEN

dbms_output.put_line('该雇员不存在');

END;

7、RAISE_APPLICATION_ERROR(error_number, msg)

error_number范围为在-20000 ---- -20999 之间

该过程只能在数据库段的子程序中使用,而不能再匿名块和客户端的子程序中使用

该消息的长度不能超过2048字节

8、编译PLSQL时,可以使用打开/关闭警告

plsql_warnings

alter system set plsql_warnings='ENABLE:ALL'

alter system set plsql_warnings='DISABLE:ALL'

9、再SQLPLUS中使用输出参数

sql> var name varcharw(10)

sql> var salary number

sql> exec query_emp(7788, :name, :salary);

sql> print name salary
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: