close

最近在做專案時用到WHERE col IN (String) 作為查詢資料庫的條件

其中String 宣告為 Varchar2 格式,裡包含許多由","分開的參數

如:

select * from t where x in (1,2,3,4)

select * from t where y in (‘A’,’B’,’C’)

其中的1,2,3,4'A','B','C'藉由前端使用者輸入以下方法也可行

個人案例是利用前端網頁抓checkbox id 傳入到同一個字串裡

e.g. : WHERE col IN (ckbGroup1)

 

其中 String ckbGroup1 = ckb_1ID1 + "," + ckb_1ID2; //其中ckbID1等參數皆為int形式

(利用jquery, 如果想詢問怎麼抓checkbox id 傳到字串可以底下留言)

然後有兩組checkbox 所以整串查詢語法大致上像這樣 :

SELECT col FROM table WHERE 

         col1 IN (ckbGroup1)

AND col2 IN (ckbGroup2);

 

看起來滿合理的compile應該會過

不過這樣不論是SQL 還是 PL/SQL 都不會過

這個問題卡了我幾天的時間

用中文google找到黑暗執行續的這篇部落格

不過這是T-SQL的語法, 在Oracle  PL/SQL 這個方法不可行

後來利用英文google找到資深Oracle工程師 THOMAS KYTE 在2006年寫的這篇部落格

就試著使用 9iR2 and above 的兩種method (公司的Oracle 版本是 11.2)

本來想說利用method2 create procedure and view 比較可以省行數

但後來個人情況是VIEW要寫在procedure裡太麻煩,所以改用method1 with data as()這個方法

但是我有兩個字串(ckbGroup1, ckbGroup2)一個Procedure好像不能開兩個 with data as() (還是其實可以的話請糾正)

所以就變成:

卡了幾天的問題終於解了實在太感動了

arrow
arrow
    創作者介紹
    創作者 JYDGuitar 的頭像
    JYDGuitar

    風城直直撞

    JYDGuitar 發表在 痞客邦 留言(0) 人氣()