ora-01007 工具变量怎么选择不在选择列表中 是什么原因

Oracle动态SQL的拼装要领 - miki西游
不积跬步,无以至千里;不积小流,无以成江海 - ITeye技术网站
博客分类:
Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符,到了sql中又要使用to_date转成date类型和原字段再比较。
例如这样一个SQL:
select '=========
and (t.created&=to_date('''||to_char(sysdate,'yyyy-mm-dd')||''',''yyyy-mm-dd'') AND t.created& to_date('''||to_char(sysdate+1,'yyyy-mm-dd')||''',''yyyy-mm-dd''))'
它就是将sysdate转成字符串,再在生成的SQL中将字符串转换成date。
拼装出来的结果如下:
and (t.created&=to_date('','yyyy-mm-dd') AND t.created& to_date('','yyyy-mm-dd'))
字符串是我们使用to_char(sysdate,'yyyy-mm-dd')生成的,语句中涉及到的每一个单引号,都要写成两个单引号来转义。
虽然拼装过程很烦人,但只要掌握好三点,就应能拼装出能用的SQL语句。
(miki西游 @mikixiyou 原文链接:
一,先确定目标。应保证拼装出来的SQL应该是什么样子,然后再去配置那个动态SQL
二,拼装SQL的时候,所有使用连接符||连接的对象都应是varchar2类型,这种类型的对象以单引号开头,以单引号结尾。数字会自动转,但date需要我们手工使用to_char函数转。
三,遇到有引号的,就写成两个单引号。
' I am a SQL developer '' '||v_name||' '' in China. telephone is '||v_number||' .'
v_name是字符型的,所以拼装它是需要前后加单引号。
这种转换很烦人,但从10g开始有一个新功能,可以让人不用这么烦。它就是q'[xxxxx]'
示例如下:
select q'[ I'm a SQL developer ' ]'||to_char(sysdate,'yyyy')||q'[' in China. telephone is ]'||1990||'.'
结果如下:
I'm a SQL developer '2012' in China. telephone is 1990.
I'm使用一个单引号在q'[]'中就可以。
to_char(sysdate,'yyyy')转成的是2012,前后是要加单引号的。所以在q'[xxx ']'的结尾加了一个单引号。
这样就使得我们不用想以前那样使用 ''''表示一个单引号了。
简而言之,掌握这三点,就应该能拼装出能用的SQL。至于如果使用绑定变量输入输出,则需要使用into using关键字。
incoming date:=sysdate-10;
execute immediate 'select COUNT(*) FROM user_objects where created & :incoming' into outg
dbms_output.put_line(' count is: ' || outgoing);
使用using的好处,就是不用去转date类型为varchar类型,再转回去date类型这种繁琐的操作。
incoming date:=sysdate-10;
execute immediate 'insert into t_object(a)
select COUNT(*) FROM user_objects where created & :incoming' into outg
dbms_output.put_line(' count is: ' || outgoing);
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.
v_ --定义游标
v_string varchar2(2999);
v_string := 'insert into t_object(a)
select COUNT(*) FROM user_objects where created & :incoming';--操作语句,其中:name是语句运行时才确定值的变量
v_cursor:=dbms_sql.open_--打开处理游标
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);
when others then
dbms_sql.close_cursor(v_cursor); --关闭游标
浏览: 661647 次
来自: 南京
浏览量:199449
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
挺好的,支持一下
不错,原来是用户oracle 的所属组的问题
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...2011年3月 Oracle大版内专家分月排行榜第二2011年2月 Oracle大版内专家分月排行榜第二
2010年10月 Oracle大版内专家分月排行榜第三
2010年9月 Oracle大版内专家分月排行榜第二
2011年4月 Oracle大版内专家分月排行榜第三2011年3月 Oracle大版内专家分月排行榜第三2011年1月 Oracle大版内专家分月排行榜第三
2011年3月 Oracle大版内专家分月排行榜第二2011年2月 Oracle大版内专家分月排行榜第二
2010年10月 Oracle大版内专家分月排行榜第三
2011年3月 Oracle大版内专家分月排行榜第二2011年2月 Oracle大版内专家分月排行榜第二
2010年10月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。基于双路输出低压差电压调整器TPS767D318的DSP电源设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于双路输出低压差电压调整器TPS767D318的DSP电源设计
上传于||文档简介
&&基于双路输出低压差电压调整器TPS767D318的DSP电源设计
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢本帖子已过去太久远了,不再提供回复功能。BIEE重启失败 User weblogic denied Server state changed to FORCE_SHUTTING_DOWN - cherryQQ - ITeye技术网站
博客分类:
BIEE重启失败 User weblogic denied Server state changed to FORCE_SHUTTING_DOWN
每次害怕什么就来什么,坑爹的oracle biee如此的脆弱,基本上每年都要重新启动一次biee 所在的主机
因为每次重新启动biee 都要严格按照操作说明,按照先后顺序进行停止,重新启动,
昨天下午4:30分,开始重新启动,先把biee informatica oracle 全部停掉,重新启动主机,
然后依次按照顺序开启 服务,到最后的 biee 服务,就是启动不起来,每次到 write to file 的时候提示
User weblogic denied
Server stste changed to FAILED
A critical service failed .the server will shut itself down
实在没有办法,才在放假期间大BI顾问的电话结果是,联系不到其他高手,曾经来现场协助开发的bi顾问也是一瓶子不满半瓶子咣当的货色,搞了办个小时,没有搞定,直接来 一句,我也不太懂
遇到这样的顾问真的能把人坑死
没有办法,如果不搞订这个 就要重新全部卸载,重新安装oralce informatica biee 这个是当初顾问搞不定,这么给我们教的,悲剧啊
后来实在没有办法,就给bi顾问的总工,打过去了,总工来了一句,服务已经到期了,然后,让我们给总工发邮件,唉,实在无奈,只好发邮件了,没有办法,等邮件写了一半,又去网上百度
介绍说是同过 明文修改boot.properties 中的用户名和密码就OK啦
于是,去搜索boot.propertie
将搜索到的三个boot文件
全部修改成:
#dec 1 2014
password=admin123
username=weblogic
还是不行,郁闷的要死,简直就要崩溃了
后来一个女同事过来提示了一下,要不要把#dec 1 2014删除哦
于是,把三个boot 文件中的#日期
全部干掉,只留下pass 和user
停止biee 重新启动,搞定
终于搞定了,同事们已经开始欢呼,晚上不用加班了,明天不用再还原了,
大家快乐的回家了,此时此刻感觉很幸福.......
现在想起来,BI顾问真TMD不靠谱,服务到期了都没有人管了,唉.....伤心
浏览: 702597 次
来自: 厦门
oracleStr2Clob,为什么要用反射,直接调用不可以吗 ...
我把敏感的用*号代替啦,这样可以了吧,等你加一个号,等着租房子 ...
dream80 写道是的,这个主要就是二步验证的问题,很多人不 ...

我要回帖

更多关于 ora-01007 的文章

 

随机推荐