日期:2014-05-16 浏览次数:20390 次
?
1、设置变量默认值:
直接在参数类型后加:=defaultvalue
例子:
?
V_FUNCNAME VARCHAR2(20) := 'IFELSE';
2、EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.
?
它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。?
?
EXECUTE IMMEDIATE 'select ' || V_JSGS_BTXM_CONTENT_VALUE || ' from dual' INTO RESULT;
规则1:EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交。
规则2:如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据。
declare l_depnam varchar2(20) := 'testing'; l_loc varchar2(10) := 'Dubai'; begin execute immediate 'insert into dept values (:1, :2, :3)' using 50, l_depnam, l_loc; commit; end;
?当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号
?
3、goto关键字:
PL/SQL对于GOTO的使用有一些限制.对于块,循环或者IF语句而言,想要从外层跳转到内层是非法的.
使用GOTO语句从一个IF子句跳转到另一个子句中也是非法的.
最后,从一个异常处理块内部跳转到当前块是非法的.
/* goto label_name; 只能由内部的语句块跳往外部块 设置标签 <<label_name>> 可以为循环设置标签 */ declare id number:=1; begin loop dbms_output.put_line('循环次数--'||id); id :=id+1; if id=10 then goto a; end if; end loop; <<a>> dbms_output.put_line('跳出循环'); end; /?注意,goto语句不能在异常处理中跳转!
?