Oracle实现动态SQL的拼装要领


当前第2页 返回上一页

简而言之,掌握这三点,就应该能拼装出能用的SQL。至于如果使用绑定变量输入输出,则需要使用into using关键字。 

set serveroutput on; 
declare
incoming date:=sysdate-10;
outgoing int;
begin
execute immediate 'select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ;
dbms_output.put_line(' count is: ' || outgoing);
end;

使用using的好处,就是不用去转date类型为varchar类型,再转回去date类型这种繁琐的操作。

SQL代码如下: 

declare
incoming date:=sysdate-10;
outgoing int;
begin
execute immediate 'insert into t_object(a) select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ;
dbms_output.put_line(' count is: ' || outgoing);
end;

ORA-01007: 变量不在选择列表中
ORA-06512: 在 line 6
 
tom这样解释这个错误:Followup    November 24, 2004 - 7am Central time zone:
 you have to use DBMS_SQL when the number of outputs is not known until run time.
 
Sql代码如下:

declare 
v_cursor number; --定义游标 
v_string varchar2(2999); 
v_row number; 
begin 
v_string := 'insert into t_object(a) select COUNT(*) FROM user_objects where created > :incoming';--操作语句,其中:name是语句运行时才确定值的变量 
v_cursor:=dbms_sql.open_cursor;--打开处理游标 
dbms_sql.parse(v_cursor,v_string,dbms_sql.native);--解释语句 
dbms_sql.bind_variable(v_cursor,':incoming',sysdate-30); --给变量赋值 
v_row := dbms_sql.execute(v_cursor);--执行语句 
dbms_sql.close_cursor(v_cursor);--关闭游标 
--dbms_output.put_line(v_row); 
commit; 
exception 
when others then 
dbms_sql.close_cursor(v_cursor); --关闭游标 
rollback; 
end; 


标签:Oracle

返回前面的内容

相关阅读 >>

oracle 11g 安装配置图文教程

oracle不同数据库间对比分析脚本

mysql与oracle 差异比较之七 其它

oracle别名使用要点小结

oracle数据库中多条件查询语句怎么写?

oracle中add_months()函数及用法总结

oracle结合mybatis实现取表的10条数据

oracle9i 动态sga,pga特性探索

oracle锁表的原因

oracle 11g release (11.1) 索引底层的数据结构

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...