【PB】在PB中嵌⼊式sql语句in的⽤法
⼀、⾸先,你不能像datawindow那样⽤数组名作为进⾏传值,因为在嵌⼊式sql语句中不⽀持只写数组名:
⽐如:如果是datawindow的话你可以这样写:
ls_jobids[]
ieve(ls_jobids)
但是,如果是sql语句,你如下⾯写法就是错误的,因为在PB中它不识别数组名:
string ls_jobids[]
ll_count
select isnull(count(distinct order_id),0) into :ll_count from Order_Main where job_id in ( ls_jobids ) using sqlca;
isnull的用法⼆、如果第⼀种⽅法⾏不通,你可能会想到动态,如果是这样那就对了说明你确实思考了这个问题。看
到这个要求,我们⾸先会想到的是第三种动态sql语句,既有参数也有结果值:
//ls_strjobid是⽤“,”号连接好的字符串
ls_sql = "select order_id from Order_Main where job_id in (?)"
declare cur_order dynamic cursor for sqlsa;
prepare sqlsa from :ls_sql;
open dynamic cur_order using :ls_strjobid;
fetch cur_order into :ll_count;
close cur_order;
但是,这样写虽然没有语法错误,但还是得不到想要的结果,因为会把ls_strjobid作为⼀个字符串看待。于是呼,你绞尽脑汁经过千思万想,突发奇想⼀种写法。但是这种写法是否正确,你也不敢肯定,⾏不⾏试了才知道:
ls_sql = "select isnull(count(distinct order_id),0) from Order_Main where job_id in ("+ls_strjobid+")"
declare cur_order dynamic cursor for sqlsa;
prepare sqlsa from :ls_sql;
open dynamic cur_order ;
fetch cur_order into :ll_count;
close cur_order;
⾸先,你会发现上⾯的写法,是第三种动态sql语句的写法,但⼜没有参数,这样到底⾏不⾏呢,经过测试可⾏的。恭喜你成功了!
总结:
(1)数组名不能作为嵌⼊式sql语句的参数。
(2)连接好的字符串也不能作为参数,否则为认为是⼀个串,⽽不是多个串。
(3)动态sql语句的定写法是可以变形的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论