【PB】在PB中嵌入式sql语句"in"的用法

一、首先,你不能像datawindow那样用数组名作为参数进行传值,因为在嵌入式sql语句中不支持只写数组名:

比如:如果是datawindow的话你可以这样写:

string ls_jobids[]

dw_1.retrieve(ls_jobids)

但是,如果是嵌入式sql语句,你如下面写法就是错误的,因为在PB中它不识别数组名:

string  ls_jobids[]

long ll_count

select isnull(count(distinct order_id),0)  into :ll_count  from Order_Main where job_id in ( ls_jobids ) using sqlca;

二、如果第一种方法行不通,你可能会想到动态sql语句,如果是这样那就对了说明你确实思考了这个问题。看到这个要求,我们首先会想到的是第三种动态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;

但是,这样写虽然没有语法错误,但还是得不到想要的结果,因为sql会把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语句的定写法是可以变形的

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值