我正在尝试为DB中所有表中列出的列创建动态UPDATE查询。但是,查询失败并显示错误代码:-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;
/
感谢您对此程序的帮助。
答案 0 :(得分:1)
可能没有名为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';
答案 1 :(得分:0)
https://forums.oracle.com/forums/thread.jspa?messageID=10896326
https://support.quest.com/SolutionDetail.aspx?id=SOL48289&pr=Code%20Tester%20for%20Oracle
http://www.orafaq.com/forum/t/176917/0/
http://www.coderanch.com/t/539059/ORM/databases/ORA-table-view-exist 导致Oracle错误代码ORA-00942的两个原因 表(或视图)确实不存在 数据库用户无权访问(或修改)表
答案 2 :(得分:0)
http://vijvipin.wordpress.com/2009/02/18/plsql-finding-a-column-name-in-all-表格/
从all_tab_columns中选择a.table_name,column_name,DATA_TYPE,DATA_LENGTH a,USER_ALL_TABLES你 其中a.TABLE_NAME = u.TABLE_NAME 和column_name之类的'empid%' 按DATA_LENGTH desc排序;