2012-12-07 33 views
0
DECLARE 

    v_name A.TRANSACTION_TYPE%TYPE :='SALARY'; 
    v_salary A.SALARY%TYPE := 1000; 

BEGIN 

    update A set v_name= v_salary where EMPID = 517; 
-- PL/SQL: ORA-00904: "v_name": invalid identifier 
--update A set SALARY = 1000 where EMPID = 517; 

END; 

/

我的想法是更新表列,但這些列名稱存儲在變量中。有沒有辦法從變量傳遞列名?是否有任何選項除了執行即時我怎麼能通過plsql更新語句中的變量列名

+1

爲什麼不立即執行? – Padmarag

+0

你不能使用動態sql的原因是什麼? – FrustratedWithFormsDesigner

回答

0

不知道這會在你的情況下工作,但我已經written solutions,我在SQL 加寫了一個腳本,它「寫」(使用dbms_output.put_line甚至只是prompt)其他執行查詢的腳本,以及這些查詢中的列/表由SQL Plus腳本中的邏輯確定。然後,我將以腳本的形式執行第一個腳本的輸出,並執行動態生成的查詢,而不需要execute immediate

0

以下想法可能適用於鍵入相同的多個列......按照書面方式,它將每次更新給定記錄的所有列,但只有v_name指定的列將更改爲設置的值v_value;其他列只是更新爲現有值。這個想法可以使用DECODE,NVL或其他類似的條件運算符來實現。

declare 

v_name varchar2(20):= 'SAL'; 
v_value emptest.sal%TYPE := 5000; 

begin 

update emptest 
set sal = (select case when v_name = 'SAL' then v_value else sal end from dual), 
comm = (select case when v_name = 'COMM' then v_value else comm end from dual) 
where empno = 7369; 

commit; 

end;