Oracle 高级特性

本地动态SQL
1.执行非查询语句和PL/SQL块

DDL,DML语句最后不能加分号, 而PL/SQL块最后需要加分号

 

可以使用using 子句执行带有绑定变量的语句:

2.执行查询
类似于游标变量,查询也是使用OPEN FOR语句执行的。它们的区别是包含查询的串可以是PL/SQL变量,而非文字。与其他任何变量一样,也可以从得到的游标变量中提取数据。对于绑定,就像EXECUTE IMMEDIATE一样,USING子句是可用的。

 

EXECUTE IMMEDIATE也可以用于单行查询,可以带绑定变量也可以不带

3.成批绑定:
PL/SQL语句块中的SQL语句被发送到SQL引擎中进行执行。SQL引擎可以依次把数据发送回PL/SQL引擎(作为查询的结果)。在许多情况下,在数据库中将要插入或更新的数据首先放到一个PL/SQL集合中,然后该集合使用FOR循环进行迭代计算,并把信息发送到SQL引擎。对于该集合中的每一行,都将产生一个PL/SQL和SQL之间的上下文开关。
Oracle8i及更高版本允许你把一个集合里的所有行在一次操作中都传递到SQL引擎中,删除到只剩一个上下文开关,这叫做成批绑定,它使用FORALL语句来完成,下面是一个例子:

FORALL的事务性问题,如果在处理成批DML操作中的一行时有错误,则只有该行被回滚。该行之前的行仍然被处理。这与使用OCI或预编译器的成批操作具有相同的行为。
Oracle9i的SAVE EXCEPTION 子句可以用于FORALL语句。使用这个子句,在批处理期间发生的任何错误都将被保存,并且该处理将会继续。可以使用SQL%BULK_EXCEPTION属性来查看该异常,该属性起着SQL*Plus表的作用。如下:

 

BULK COLLECT子句可用作SELECT INTO,FETCH INTO,RETURNING INTO子句的一部分,并将从查询中把行检索到所指示的集合中。

注:FORALL可以用于集合类型以及INSERT,UPDATE,DELETE 语句中,而BULK COLLECT子句用于取数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值