【PB】在PB中嵌入式sql語句”in”的用法

來源:互聯網
上載者:User

一、首先,你不能像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語句的定寫法是可以變形的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.