2014-10-29 58 views
0

對於大多數人來說,這可能是一個簡單的查詢。在嵌套查詢中使用變量執行立即操作

我想在嵌套查詢中使用一個變量,同時編寫立即執行,但不知何故,它每次都在嵌套查詢中引發一個錯誤。

create or replace PROCEDURE p_decrement_id(
    in_table   VARCHAR2, 
    in_seg_nme VARCHAR2) 
AS 
    version  VARCHAR2(5) := 'v1.0'; 
BEGIN 

EXECUTE IMMEDIATE 'UPDATE '|| in_table || ' 
SET X_VERSION_ID = X_VERSION_ID - 1 
where DATE_1 = (SELECT DATE_2 FROM CYCLE_DATES 
       WHERE SEG_NME = ' ||in_seg_nme||')'; 

    COMMIT; 
END p_decrement_id; 

執行我使用:

set serveroutput on 
call p_decrement_id('TEST_DECREMENT', 'TEST'); 

另外,我需要把查詢中的恆定值 即

SELECT DATE_2 FROM CYCLE_DATES 
WHERE SEG_NME = ' ||in_seg_nme||' 
and indicator = 'Y' 

請指導。

謝謝大家提前

回答

0

這是更好地使用用來PARAMS綁定到你的查詢

EXECUTE IMMEDIATE 'UPDATE '|| in_table || ' 
SET X_VERSION_ID = X_VERSION_ID - 1 
where DATE_1 = (SELECT DATE_2 FROM CYCLE_DATES 
       WHERE SEG_NME = :1 and indicator = ''Y'')' using in_seg_nme; 

不使用你可以試試這個(因爲它是VARCHAR2你需要「):

EXECUTE IMMEDIATE 'UPDATE '|| in_table || ' 
SET X_VERSION_ID = X_VERSION_ID - 1 
where DATE_1 = (SELECT DATE_2 FROM CYCLE_DATES 
       WHERE SEG_NME = ''' ||in_seg_nme||''' and indicator = ''Y'')'; 

(兩個因此產生的撇號是撇號的轉義序列)

+0

非常感謝你Multisync。它像一個魅力。感謝你的幫助,並指導我去哪裏出錯。 – D002 2014-10-29 15:21:49