动态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子句,暂时没用到,以后遇到在好好研究!
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子句,暂时没用到,以后遇到在好好研究!
相关文章推荐
- 【ibatis】ibatis动态操作sql数据
- 从HBase数据库表中读取数据动态转为DataFrame格式,方便后续用Spark SQL操作(scala实现)
- 动态SQL中拼入Binary数据,以及对CDC表行转列操作类型分组的标准SP
- 【Hadoop】HBase上安装使用Phoenix来用sql语句更新操作数据,安装的过程各种坑和经验
- 动态生成SQL语句,对数据操作
- 动态生成SQL语句,对数据操作
- 在sqlserver中如何对text类型的数据进行replace操作。 MS-SQL Server / 基础类 - CSDN社区 community.csdn.net
- 动态导出数据到文本/xls/sql/doc文件
- SQL随机读取动态数据
- Delphi 操作SQL 插入一万条数据 三种方式速度测试
- SQL应用与开发:(七)数据操作 · 查 · (二)高级型
- sql编程 存储过程 之 动态添加数据库表列并更新数据库表数据
- java对redis各种数据类型的基本操作
- CI框架AR操作(数组形式)实现插入多条sql数据的方法
- 对表数据进行(置顶,上移,下移,置底操作)---数据库sql
- [SQL]SQL删除数据的各种方式总结
- Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第三部分:SqlField)
- Oracle-oracleSQL对单表各种查询操作及函数的使用
- PL/SQL Developer 操作导出数据脚本、数据
- SQL基础操作_3_数据字典