2014-02-07 74 views
1

我有一個SQL過程,它應執行FOR-IN(SELECT ..)循環,其中SELECT內容應根據某些輸入參數。我的想法是將SELECT字符串存儲到一個變量中,然後嘗試在FOR-IN循環中提取變量值,但目前爲止沒有成功(以前有一個修復的SELECT語句用於那裏,這就是我現在要替換的)。代碼看起來大致如下在SQL FOR-IN(SELECT)循環中使用字符串變量的值循環

PROCEDURE run(p_boolean BOOLEAN) 
IS 
BEGIN 
    DECLARE 
    v_mystring VARCHAR(50); 
    BEGIN 
    IF p_boolean = TRUE 
    THEN 
     v_mystring := 'SELECT something...'; 
    ELSE 
     v_mystring := 'SELECT something else...'; 
    END IF; 

    FOR p_table_name IN (would-like-to-use-the-value-of-v_mystring-here-some-way) 
    LOOP 
     ... 
    END LOOP; 

    END; 
END; 

作爲在SQL相當新手,很可能發生的試圖在這裏使用一個字符串變量值的整個概念是錯誤的。我瀏覽了一些教程並嘗試了一些其他想法(例如遊標),但沒有結果。任何想法表示讚賞

+0

該平臺是Oracle。 FOR循環基本上除了使用p_table_name.table_name進行日誌打印外沒有其他任何操作 – hammerfest

回答

5

假設Oracle的PL/SQL,您可以使用動態字符串打開REFCURSOR並把它在一個循環..

PROCEDURE run(p_boolean BOOLEAN) 
IS 
BEGIN 
    DECLARE 
    v_mystring VARCHAR(50); 
    v_my_ref_cursor sys_refcursor; 
    BEGIN 
    IF p_boolean = TRUE 
    THEN 
     v_mystring := 'SELECT something...'; 
    ELSE 
     v_mystring := 'SELECT something else...'; 
    END IF; 

    OPEN v_my_ref_cursor FOR v_mystring; 

    LOOP 
     FETCH v_my_ref_cursor INTO your_variables/record 
     EXIT WHEN v_my_ref_cursor%NOTFOUND; 
     .. 

    END LOOP; 
    CLOSE v_my_ref_cursor; 

    END; 
END;