动态SQL入门

动态SQL语句的理解

1. 动态SQL的分类

根据要处理的sql语句的作用不同,可以使用三种不同类型的动态sql方法:

 1) 使用execute immediate语句可以处理包括DDL(create、alter和drop)、DCL(grant、revoke)、DML(insert、update、 delete)以及单行select语句;

 2) 使用open cursorname for sql_statement语句可以处理多行查询操作;

 3) 使用批量动态sql(forall)可以加快sql语句处理,进而提高plsql程序的性能。

 

 2. 动态SQL语法:
   execute immediate语句:

    
    
Define_variable用于指定存放单行查询结果的变量;using in bind_argument用于指定存放传递给动态sql值的变量,即在dynamic中存在占位符时使用;using out bind_argument用于指定存放动态sql返回值的变量。

 

 

3. 动态语法示例: 

通过六个示例理解动态SQL:

 

示例1:

使用execute immediate执行简单ddl语句
 


示例2:

使用execute immediate执行dcl语句

 


示例3:

使用execute immediate处理dml语句时,如果dml语句包含占位符,那么在execute immediate语句之后必须要带有using子句;如果dml语句带有returning子句,那么在execute immediate语句之后必须带有returning into子句,并且此时只能处理作用的单行上的dml语句,如果dml语句作用在多行上,则必须使用bulk子句。
 


示例4:

使用动态游标处理多行查询类动态sql语句。



oracle通过使用bulk collect into子句处理动态sql中的多行查询可以加快处理速度,从而提高应用程序的性能。当使用bulk子句时,集合类型可以是plsql所支持的索引表、嵌套表和varray,但集合元素必须使用sql数据类型。在oracle9i以后,有三种语句支持bulk子句,execute immediate,fetch和forall。


示例5:

在execute immediate中使用bulk collect into处理多行查询返回结果。


示例6:

在forall语句中使用bulkinto语句。
1          d          wang     12
2          dsaf      wang     23
3          asdf      wang     34
4          liasdf    wang     
5          li          wang     
6          asdf      wang     
7          li          wang     
8          li          wang     

 

执行结果:

 

转载自:http://itjaj.com/thread-3112-1-5.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值