【Oracle】儲存過程中將動態SQL的多行結果進行迴圈遍歷
需求背景:
有一段拼接出來的動態SQL,結果為多行,需要在函式或者儲存過程中將其結果作為遊標中的資料迴圈遍歷出來以便後續資料操作
使用動態SQL和隱式遊標
隱式遊標不支援動態SQL的直接使用,但是可以透過EXECUTE IMMEDIATE來執行動態SQL並將結果儲存在一個集合中,然後遍歷這個集合,以實現這個需求
示例:
直接執行動態sql得到的結果是
使用隱式遊標+EXECUTE IMMEDIATE組成的測試檔案
declare
dynamic_sql varchar2(4000);
type temp_table_type is table of table1%rowtype;--此處表名要與動態SQL中的一致,檢視也可以
temp_data temp_table_type;
begin
-- 動態拼接sql語句
dynamic_sql := 'select a.* from table1 a where 1=1';
-- 執行動態sql並將結果儲存在集合中
execute immediate dynamic_sql bulk collect into temp_data;
-- 遍歷集合
for i in temp_data.first .. temp_data.last loop
dbms_output.put_line('kindcode: ' || temp_data(i).kindcode || ', activecode: ' || temp_data(i).activecode);
end loop;
end;
執行後輸出
這樣就能實現要求了