2013-05-22 54 views
1

我正在嘗試爲DB中所有表中列出的列創建動態更新查詢。但是,查詢失敗,錯誤代碼:-942消息:ORA-00942:表或視圖不存在ORA-06512:在 「MANTAS.P_JRSDCN_TR」,線路14過程中的動態更新查詢

代碼: -

CREATE or REPLACE PROCEDURE P_JRSDCN_TR 
(
out_error_cd out number,  -- Returns 0 if no error; anything else is an error 
out_error_msg out varchar2  -- Returns empty string if no error; otherwise the error and trace 
)AUTHID CURRENT_USER 
IS 
    counter number(20) :=0; 
CURSOR TAB_COL_CURSOR IS 
SELECT DISTINCT OWNER||'.'||TABLE_NAME as TABLE_NAME,COLUMN_NAME FROM ALL_TAB_COLS WHERE TABLE_NAME IN ('KDD_REVIEW') AND COLUMN_NAME='JRSDCN_CD'; 
BEGIN 
    FOR TAB_COL_REC IN TAB_COL_CURSOR 
    LOOP 

EXECUTE IMMEDIATE 'UPDATE TAB_COL_REC.TABLE_NAME SET TAB_COL_REC.COLUMN_NAME = P2||SUBSTR(TAB_COL_REC.COLUMN_NAME,3) WHERE SUBSTR(TAB_COL_REC.COLUMN_NAME,1,2)= PL'; 

counter := counter +SQL%rowcount ; 
If counter >= 50000 then 
    counter := 0; 
    --commit; 
    end if; 

-- Done!  
    out_error_cd := 0; 
    out_error_msg := ''; 
    dbms_output.put_line('Turkey Jurisdiction Update completed sucessfully at ' || to_char(sysdate,'MM/dd/yyyy HH24:MI:SS')); 
     END Loop; 
exception when others then 
     rollback; 
     out_error_cd := SQLCODE; 
     out_error_msg := substr(sqlerrm, 1, 200) || chr(10) || substr(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 3896);   
     dbms_output.put_line(' Code: ' || out_error_cd); 
     dbms_output.put_line(' Message: ' || out_error_msg); 
     dbms_output.put_line('Turkey Jurisdiction Update FAILED at ' || to_char(sysdate,'MM/dd/yyyy HH24:MI:SS')); 
end; 
/

感謝您對此程序的幫助。

回答

1

可能沒有ta BLE稱爲TAB_COL_REC.TABLE_NAME

你可能想是這樣的:

EXECUTE IMMEDIATE 'UPDATE ' || TAB_COL_REC.TABLE_NAME || ' SET ' || TAB_COL_REC.COLUMN_NAME || ' = P2||SUBSTR(' || TAB_COL_REC.COLUMN_NAME ||',3) WHERE SUBSTR(' || TAB_COL_REC.COLUMN_NAME || ',1,2)= PL'; 
+0

嗨凱德我修改了查詢 – Sam

+0

@Sam,發生了什麼?它仍然不工作? –

+0

嗨凱德,謝謝查詢現在工作正常。 – Sam

0
+0

嗨Sindhu,謝謝你的答覆。表存在和數據庫用戶是表的所有者,所以我看到它,它可以修改,我能夠做一個程序之外。問題是當我嘗試立即執行它不工作。是否有任何語法錯誤我缺少..我是PL/SQL的新手,所以我不知道我錯過了什麼。 – Sam