因為專案需要,有一段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.在拼接時,有的地方輸入變數為定值,應注意單引號的使用。
SQL查詢語句拼接
1.判斷引數是否為空,2.把引數中的空格去掉3.1 1永遠是真,加1 1的目的是為了接後面的條件的,否則 where and 條件 and 條件 是有語法錯誤的string sql select from 表名 where 1 1 if condition1 string.empty 再分享一下我老...
語句拼接 常用SQL語句分享
前言 日常工作或學習過程中,我們可能會經常用到某些sql,建議大家多多整理記錄下這些常用的sql,這樣後續用到會方便很多。筆者在工作及學習過程中也整理了下個人常用的sql,現在分享給你!可能有些sql你還不常用,但還是希望對你有所幫助,說不定某日有需求就可以用到。注 下文分享的sql適用於mysql...
sql語句拼接,字元擷取,sql排序
1 下面的語句會把,從t in 1表查詢的vinleft欄位進行去重,同理t vin 3 做同樣的處理,並且把兩個查詢的結果連在一起 select distinct vinleft from t vin 0 union select distinct vinleft from t vin 1 uni...