您的位置:首页 > 数据库

动态SQL--灵活操作各种数据!

2007-10-19 17:10 211 查看
静态SQL用于完成特定的功能,动态SQL用于灵活的处理各种数据

PS:执行动态SQL语句,需要将SQL语句存放到字符串变量中,且SQL语句可以包含占位符(以冒号开始)

占位符例子: select * from test where name=:1; --红色表示占位符

1、定义:

动态SQL是指在运行PL/SQL块的时动态输入的SQL语句。

2、使用动态SQL的条件:

1)执行DDL语句 如:create,alter,drop

2)执行DCL语句 如:grant,revoke

3)执行更加灵活的SQL语句 如:在select语句中使用不通的where条件

3、动态SQL的处理方法

1)使用EXECUTE IMMEDIATE语句 (用的最多)

a、处理DDL操作 --在PL/SQL块中只能用动态SQL

b、处理DCL操作 --在PL/SQL块中只能用动态SQL

c、处理DML操作 M=manipulation 处理,操作

d、处理单行查询操作

2)使用OPEN-FOR,FETCH和CLOSE语句(会一点)

3)使用批量动态SQL(基本不会)

例子:

(1)带返回值

declare

user_number number(3);

v_sql varchar2(1000);

begin

v_sql := 'update hkb_test3 a

set a.age = :a+15

where a.user_id = :b returning a.age into :user_number';

execute immediate v_sql

using &a, &b

returning into user_number; (红色三行是一句SQL语句)

dbms_output.put_line('user_number :' || user_number);

end;

(2)不带返回值

declare

v_sql varchar2(100);

begin

v_sql := 'update hkb_test3 a

set a.age= :a' || '

where a.user_id= :b';

execute immediate v_sql

using &a,&b;

end;

(3)游标实现多行查询

declare

type agecursor is ref cursor;

v_age agecursor; --定义游标变量

v_name hkb_test%rowtype; (继承表的行属性)

v_sql varchar2(1000);

begin

v_sql := 'select * from hkb_test where age=:a';

open v_age for v_sql

using &a; --打开游标变量

loop

fetch v_age

into v_name;

exit when v_age%notfound;

dbms_output.put_line(v_name.name || 'age:' || v_name.age);

end loop; --循环提取数据

close v_age; --关闭游标变量

end;

PS:在动态SQL中使用BULK子句,暂时没用到,以后遇到在好好研究!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: