求助 :在 plsql下可以执行的语句放到wr下执行结果为 -10162
测试脚本为:(目的就是执行sql,察看是否执行成功)public sql,rr,recordNumber;
db_connect("query1","DSN=salecs;UID=zhaoah;PWD=zhaoah;DBQ=salecs;DBA=W;APA=T;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC=10;TLO=0;",30);
sql="select * from ZY.RES_SIM a where 1 = 1 and rownum <= 100 and res_date < to_date('20081127121624','YYYYMMDDHH24MISS') "
&"and (region_code = 771 or oregion_code = 771) and (receiver=0 or receiver is null) and brand in (0,5) and res_code = "
&"200001 and hlr_code = 7711 and main_flag = 1 and sts = 2 and res_sts in (1,4,5) and exists(select 1 from "
&"ZY.RES_MSISDN_IMSI_MAP b where b.start_msisdn <= '13607714582' and b.end_msisdn >= '13607714582' and "
&"b.start_imsi <= a.imsi and b.end_imsi >= a.imsi)";
report_msg(sql);#--sql显示正确
rr=db_execute_query("query1",sql,recordNumber);
pause(rr);#--rr= -10162,为sql语法错误的提示信息
该问题问过同事,说是wr下的语法规则比plsql下的语法严格,但是查来查去,自己没看出什么不规则的地方了,麻烦各位火眼金睛帮忙看看。 当然也可能是其他问题,欢迎指教 1.SQL语句本身可以执行吗?
2.把SQL语句写的简单点,看是否可以执行通过?
如果上面两个都不可以,可能是你DSN的设置或其他什么地方有问题 1.sql可以单独执行通过
2.其他sql语句测试通过,比如说sql="select * from ZY.RES_SIM where rownum<10";
(同时也证明其他配置应该没问题吧)
是否有其他语法格式上的问题?? 我的看法是:WR可能不支持复杂的SQL语句
或则你可以慢慢的将SQL语句复杂起来,看到底在哪个地方出错 找到问题了,sql语句到....main_flag = 1可以执行通过,但是再加一个sts=2,就不通过了,初步确定楼上的说法,好像真不支持复杂(具体来说太长的?)的sql,这样子的话比较麻烦,sql语句没办法优化了,请问一下有什么解决的办法没?
只有分开来,比如说第一个条件执行后的结果放到第二个sql下再执行?累计得到结果?似乎有点繁琐了... 现在得问题是想拆开也拆不开了 ,第一个 sql完整执行(就是不关联其他表 )也不通过(太长 ),没有办法拆吧
是否有其他解决办法 ? 用其他语言来实现 比如VBS 看看是否可以 昨天后来我还想到一个办法 但现在忘了 等记起来再跟你说 WR连接数据库没有问题吧? 回复楼上 :连接没有问题,呵呵,
后经多次调试,发现wr也不支持 exists,,, 修改成between,才调过 .
谢谢各位,
总结:wr对sql的支持语法严格,并且不支持复杂的sql语句(太成了很容易提示语法错误,但是不是绝对的,没有找到 限制的长度或者具体限制的复杂度),另外,好像不支持exists.
引用:
用其他语言来实现 比如VBS 看看是否可以 昨天后来我还想到一个办法 但现在忘了 等记起来再跟你说
----我们目前的系统框架只有初始化脚本的时候通过vba实现调用执行(具体有没有错误现在好像没遇到),vbs可以实现么?,呵呵,欢迎指教.
[ 本帖最后由 zhaoaihua305 于 2007-12-25 16:22 编辑 ]
页:
[1]