【Oracle】儲存過程中將動態SQL的多行結果進行迴圈遍歷

DbWong_0918發表於2024-08-21

【Oracle】儲存過程中將動態SQL的多行結果進行迴圈遍歷

需求背景:
有一段拼接出來的動態SQL,結果為多行,需要在函式或者儲存過程中將其結果作為遊標中的資料迴圈遍歷出來以便後續資料操作

使用動態SQL和隱式遊標

隱式遊標不支援動態SQL的直接使用,但是可以透過EXECUTE IMMEDIATE來執行動態SQL並將結果儲存在一個集合中,然後遍歷這個集合,以實現這個需求

示例:

直接執行動態sql得到的結果是

image

使用隱式遊標+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;

執行後輸出

image

這樣就能實現要求了

相關文章