2014-06-12 20 views
0

我有一個具有執行立即語句的過程。在那個執行即時語句中調用一個有兩個輸出參數的過程。我在嘗試獲取那些在調用execute immediate語句的過程中使用的參數時遇到了問題。從調用過程的立即執行語句中使用out參數

execute_stmt := 'DECLARE pi_error_log_rec error_log%ROWTYPE; p_plan_id NUMBER; begin SCHEMA.PACKAGE_NAME.' || 
       PROCEDURE || '(' || 
       p_audit_log_id || ', ' || 
       V_PARAMETER1 || ', ' || '''' || 
       V_PARAMETER2 || '''' || 
       ', p_plan_id, pi_error_log_rec); end;'; 
execute immediate execute_stmt; 

if(pi_error_log_rec.error_text IS NOT NULL) THEN 
    --do stuff; 
ELSE 
    --do stuff; 

的輸出參數是p_plan_idpi_error_log_rec,剩餘的是IN參數。所以我需要獲得這兩個輸出用於調用此立即執行的過程中。但它沒有在變量中設置輸出。我錯過了一個步驟,還是應該在使用輸出參數時使用不同的方法?

回答

3

試試這個:

execute_stmt := 'Begin SCHEMA.PACKAGE_NAME.PROCEDURE(:p_audit_log_id, :V_PARAMETER1, :V_PARAMETER2); END;'; 
execute immediate execute_stmt USING IN p_audit_log_id, OUT pi_error_log_rec, OUT p_plan_id; 

由於Oracle 12c中還可以獲取PL/SQL數據類型(如RECORDSBOOLEAN)爲動態SQL。在早期版本中,僅限於SQL數據類型(如NUMBER,VARCHAR2等)

+0

謝謝。這解決了我的問題。但我認爲這是關於記錄類型的。我得到一個錯誤,說它必須使用SQL類型。 – Alkey29

+0

查看我關於記錄類型的更新答案 –

相關問題