ORACLE FUNCATION 学习笔记

ORACLE FUNCATION 学习笔记

ID:38166888

大小:20.44 KB

页数:4页

时间:2019-06-06

ORACLE FUNCATION 学习笔记_第1页
ORACLE FUNCATION 学习笔记_第2页
ORACLE FUNCATION 学习笔记_第3页
ORACLE FUNCATION 学习笔记_第4页
资源描述:

《ORACLE FUNCATION 学习笔记》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ORACLEFUNCATION学习笔记在ORACLE的PL/SQL里:EXECUTEIMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包之上。--使用技巧1.EXECUTEIMMEDIATE将不会提交一个

2、DML事务执行,应该显式提交如果通过EXECUTEIMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTEIMMEDIATE自己的一部分.如果通过EXECUTEIMMEDIATE处理DDL命令,它提交所有以前改变的数据2.不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REFcursors.3.当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号.4.在Oracle手册中,未详细覆盖这些功能。下面的例子展示了所有用到Executeimmediate

3、的可能方面.希望能给你带来方便.5.对于Forms开发者,当在PL/SQL8.0.6.3.版本中,Forms6i不能使用此功能.EXECUTEIMMEDIATE--用法例子1.在PL/SQL运行DDL语句beginexecuteimmediate'setroleall';end;2.给动态语句传值(USING子句)declarel_depnamvarchar2(20):='testing';l_locvarchar2(10):='Dubai';beginexecuteimmediate'insertintodept

4、values(:1,:2,:3)'using50,l_depnam,l_loc;commit;end;3.从动态语句检索值(INTO子句)declarel_cntvarchar2(20);beginexecuteimmediate'selectcount(1)fromemp'intol_cnt;dbms_output.put_line(l_cnt);end;4.动态调用例程.例程中用到的绑定变量参数必须指定参数类型.黓认为IN类型,其它类型必须显式指定declarel_routinvarchar2(100):='g

5、en2161.get_rowcnt';l_tblnamvarchar2(20):='emp';l_cntnumber;l_statusvarchar2(200);beginexecuteimmediate'begin'

6、

7、l_routin

8、

9、'(:2,:3,:4);end;'usinginl_tblnam,outl_cnt,inoutl_status;ifl_status!='OK'thendbms_output.put_line('error');endif;end;5.将返回值传递到PL/SQL记录类型;同样也

10、可用%rowtype变量declaretypeempdtlrecisrecord(empnonumber(4),enamevarchar2(20),deptnonumber(2));empdtlempdtlrec;beginexecuteimmediate'selectempno,ename,deptno'

11、

12、'fromempwhereempno=7934'intoempdtl;end;6.传递并检索值.INTO子句用在USING子句前declarel_deptpls_integer:=20;l_namvarcha

13、r2(20);l_locvarchar2(20);beginexecuteimmediate'selectdname,locfromdeptwheredeptno=:1'intol_nam,l_locusingl_dept;end;7.多行查询选项.对此选项用insert语句填充临时表,用临时表进行进一步的处理,也可以用REFcursors纠正此缺憾.declarel_salpls_integer:=2000;beginexecuteimmediate'insertintotemp(empno,ename)'

14、

15、'

16、selectempno,enamefromemp'

17、

18、'wheresal>:1'usingl_sal;commit;end;对于处理动态语句,EXECUTEIMMEDIATE比以前可能用到的更容易并且更高效.当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。