1. 程式人生 > >拼接SQL語句[Oracle]

拼接SQL語句[Oracle]

因為專案需要,有一段select語句中的列,想實現可配置,因此就需要用for迴圈。但嘗試之後發現select語句中是不允許放for迴圈的。

因此就有了本篇文章。僅是自己在做專案中的一點小心得。歡迎各位大神指正。

需求 select  column1,column2,column3,column41,column42,column43,column44...... from table1 where [條件]。其中column41,column42,column43,column44......是想放在另一個表中維護的,因此這些列有可能會增加、減少、改變。

現在我們開始寫這部分程式碼。

首先我們需要定義一個變數,來存放拼接好的SQL語句。

V_SQL_STR   varchar2(30000);

接下來就是拼接語句:

V_SQL_STR:=CONCAT(V_SQL_STR,'SELECT ');

V_SQL_STR:=CONCAT(V_SQL_STR,COLUMN1);

V_SQL_STR:=CONCAT(V_SQL_STR,COLUMN2);

V_SQL_STR:=CONCAT(V_SQL_STR,COLUMN3);

--開始拼接Column41往後的列

OPEN TDCV FOR      --開啟遊標
           SELECT  ITEM_CD
             FROM table2
            WHERE [條件];

      FETCH TDCV BULK COLLECT INTO ITEM_CDS;

      CLOSE TDCV;

      IF ITEM_CDS.COUNT > 0
      THEN
         FOR I IN ITEM_CDS.FIRST .. ITEM_CDS.LAST
         LOOP
            V_SQL_STR :=CONCAT (V_SQL_STR,ITEM_CDS(I));     --將查出來的符合條件的列拼接到SQL語句中

         END LOOP;
      END IF;

V_SQL_STR:=CONCAT(V_SQL_STR,'from table1');

V_SQL_STR:=CONCAT(V_SQL_STR,'where ');

V_SQL_STR:=CONCAT(V_SQL_STR,'[加上查詢條件]');

OPEN P_CUR FOR V_SQL_STR ;        --開啟遊標,開始查詢

拼接語句,寫起來除錯比較麻煩一定要沉下心來慢慢理。

1.在拼接where條件時,如果用到時間變數,要注意時間格式以及轉換,除錯了好久這個時間條件。

2.在拼接時,有的地方輸入變數為定值,應注意單引號的使用。