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语句不能在异常处理中跳转!