`
wwty
  • 浏览: 537749 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

变量默认值和EXECUTE IMMEDIATE以及goto关键字

SQL 
阅读更多

 

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics