Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt

Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt

ID:50020328

大小:246.50 KB

页数:27页

时间:2020-03-07

Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt_第1页
Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt_第2页
Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt_第3页
Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt_第4页
Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt_第5页
资源描述:

《Oracle 11g数据库管理与开发基础教程 教学课件 作者 袁鹏飞 第15章.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Oracle11g数据库管理与开发基础教程授课教师:职务:第15章动态SQL操作课程描述在PL/SQL程序块中可以直接使用SQL语句,但是仅限DML语句,这是因为PL/SQL采用早期绑定变量的方式进行编译。如果要使用DDL语句和系统控制语句,就只能通过动态SQL来实现。本章将介绍动态SQL的基本概念,以及在PL/SQL中使用动态SQL的方法。本章知识点动态SQL的基本概念PL/SQL中使用动态SQL15.1动态SQLPL/SQL程序中可以使用的SQL语句分为两种:静态SQL语句和动态SQL语句。静态SQL语句,即

2、在PL/SQL块中的SQL语句在编译时被绑定确定下来,执行过程中不能再改变操作对象。动态SQL是指在PL/SQL块编译时SQL语句是不确定的,编译程序不对动态SQL语句部分进行处理,而是在程序运行时动态地创建语句,对语句进行语法分析并执行该语句。当PL/SQL程序中必须执行DDL语句,或者用户不确定在编译时SQL语句的全部文本、输入/输出变量的数量以及类型时,使用动态SQL。PL/SQL提供了两种实现动态SQL的方法:本地动态SQL:这是PL/SQL的特色之一,用来创建以及执行动态SQL语句;DBMS_SQL包:

3、这是Oracle提供的包,用于创建、执行和描述动态SQL语句。15.2本地动态SQL本地动态SQL的处理又分为两种方法:调用EXECUTEIMMEDIATE语句;调用OPEN-FOR、FETCH和CLOSE语句。15.2.1动态SQL处理方法一本地动态SQL方法一通过调用EXECUTEIMMEDIATE语句来处理动态SQL语句,该语句的语法格式为:EXECUTEIMMEDIATEdynamic_sql_stmt[INTO{variable1[,variable2,…]

4、record}][USING[IN

5、OUT

6、

7、INOUT]bind_argument1[,bind_argument2,…]][{RETURNING

8、RETURN}into_clause];其中:dynamic_sql_stmt:要执行的SQL语句文本;INTO子句:提供已定义的变量列表,用于保存SELECT语句的返回结果,当动态SQL语句为返回单行查询结果的SELECT语句时,就会使用这个子句;USING子句:列出绑定参数列表,这些参数会传递到动态SQL语句;与存储过程中的参数模式一样,在EXECUTEIMMEDIATE语句内,IN、OUT和INOUT指出

9、所传递的参数模式;如果不指定任何模式,USING子句中所列出的参数均是输入参数;RETURINGINTO或RETURNINTO子句:包含绑定参数列表,用于将SQL语句执行的返回值保存到相应的变量中;实际上,如果在EXECUTEIMMEDIATE语句中使用该子句返回值,那么在USING子句中就没必要使用OUT参数返回值了。例1,在PL/SQL块中使用动态SQL实现数据库表的动态删除、重建和查询操作。SCOTT@orcl_dbs>DECLARE2sql_stmt1VARCHAR2(200);3sql_stmt2VAR

10、CHAR2(200);4dept_noemp.deptno%TYPE;5table_nameVARCHAR2(20);6salaryemp.sal%TYPE;7empcountNUMBER(4);8BEGIN9EXECUTEIMMEDIATE'DROPTABLEmyemp';10dept_no:=&a;11--根据用户输入,构建动态SQL的DDL语句文本12sql_stmt1:='CREATETABLEmyemp'

11、

12、13'ASSELECT*FROMemp'

13、

14、14'WHEREdeptno='

15、

16、dept_no;

17、15EXECUTEIMMEDIATEsql_stmt1;16--用户可以选择从emp表或myemp表查询17table_name:='&b';18--构建动态SQL的DDL语句文本,查询的表名直接包含在文本内,19--但查询条件要求作为绑定参数传入20sql_stmt2:='SELECTSUM(sal)FROM'

18、

19、table_name

20、

21、21'WHEREdeptno=:1';22DBMS_OUTPUT.PUT_LINE(sql_stmt2);23EXECUTEIMMEDIATEsql_stmt224INTOsa

22、lary25USINGdept_no;26DBMS_OUTPUT.PUT_LINE(dept_no

23、

24、'工资总和:'

25、

26、salary);27END;28/注意:sql_stmt2定义的动态SQL文本中使用了占位符“:1”,它相当于过程或函数的形式参数,使用“:”作为前缀。当执行动态SQL语句时,用USING子句中的绑定变量的值替换该占位符。本地动态SQL中使用绑定变量需要

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

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

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