2013-05-22 74 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