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
或者没有数据,就会报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
相关文章推荐
- PL/SQL学习笔记-函数
- 13-Oracle学习_PL/SQL
- PL/SQL学习笔记-程序包
- PL/SQL学习笔记-约束
- Oracle之PL/SQL学习笔记
- ORACLE之PL/SQL简单基础语法学习(一)
- Oracle PL/SQL语句基础学习笔记(上)
- PL/Sql循序渐进全面学习教程(4) [转]
- PL/SQL 学习
- PL/Sql循序渐进全面学习教程
- Oracle 学习:PL/SQL循序渐进全面学习教程--课程一 PL/SQL 基本查询与排序
- Oracle 学习:PL/SQL循序渐进全面学习教程--课程九 声明变量
- PL/SQL函数学习笔记:decode函数
- pl/sql基础知识学习笔记(二)
- oracle 11g PL/SQL Programming学习十七
- oracle 11g PL/SQL Programming学习十二
- PL/SQL 学习笔记3
- PL/SQL 函数学习
- PL/SQL学习
- PL/SQL 函数学习 - Start with...Connect By