执行立即使用的摘要
它解析并立即执行SQL语句,或者创建动态的非运行时SQL块。动态地创建和执行sql语句的性能,立即执行的目标是降低企业成本并获得比以前更高的性能,这是非常容易的编码。虽然dbms_sql仍然可用,但推荐使用直接执行,因为它是包中的收益。-使用技巧
1。立即执行不会提交DML事务执行,应明确提交
如果DML命令是通过执行即时处理,
然后,它需要显式地提交,或者在完成之前直接作为执行的一部分。
如果是通过执行DDL命令立即处理,提交所有以前改变的数据
2。不支持使用临时表存储记录的多行查询(引用示例如下)或使用REF游标。
三.执行SQL语句时,不要使用分号。当执行块时,在块的结尾使用分号。
4。在Oracle手册中,这些功能没有详细介绍。
下面的示例展示了执行立即使用的所有可能方面。我希望对你方便。
5。开发商为形式,形式6i不在PL / SQL 8.0.6.3使用此功能。版本。
立即执行——一个使用示例
1。在PL / SQL DDL语句
开始
执行所有的immediate'set作用;
结束;
2。到动态语句的值(使用子句)
声明
l_depnam VARCHAR2(20):= 'testing;
l_loc VARCHAR2(10):= 'dubai;
开始
执行immediate'insert成部值(:1,:2,:3)
以50,l_depnam,l_loc;
承诺;
结束;
三.从动态语句检索值(到子句)
声明
l_cnt VARCHAR2(20);
开始
执行immediate'select计数(1)从EMP
为l_cnt;
dbms_output.put_line(l_cnt);
结束;
4。动态调用例程。例程中使用的绑定变量参数必须指定参数的类型。
在默认类型中,必须显式指定其他类型。
声明
l_routin VARCHAR2(100):= 'gen2161 get_rowcnt;
l_tblnam VARCHAR2(20):= 'emp;
l_cnt数;
l_status VARCHAR2(200);
开始
执行immediate'beginl_routin| | | |(:2,:3,:4);结束;
利用l_tblnam,出l_cnt,在l_status;
如果l_status!= 'ok'then
dbms_output.put_line(错误的);
最后如果;
结束;
5。通过返回值的PL / SQL记录类型;同时使用%ROWTYPE变量
声明
型empdtlrec记录(EMPNO号(4),
ename VARCHAR2(20),
表号(2));
empdtl empdtlrec;
开始
执行immediate'select编号、姓名,编号| |
从EMP在empno = 7934
为empdtl;
结束;
6。传输和检索的使用条款前value.into条款
声明
l_dept pls_integer:= 20;
l_nam VARCHAR2(20);
l_loc VARCHAR2(20);
开始
执行immediate'select名称、LOC的部门表:1
为l_nam,l_loc
使用l_dept;
结束;
7。多行查询选项。此选项用INSERT语句填充临时表,
临时表用于进一步处理,REF游标也可用于纠正此缺陷。
声明
l_sal pls_integer:= 2000;
开始
执行immediate'insert温度(EMPNO,ename)| |
选择empno,从EMP | | ename
萨尔:1
使用l_sal;
承诺;
结束;
对于动态语句,直接执行比以前更容易、更高效。
当它用于执行动态语句时,正确处理异常更为重要。应该关注捕获所有可能的异常。