2013-05-22 4 views
1

Я пытаюсь создать запрос Dynamic 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; 
/

Оцените вашу помощь по этой процедуре.

ответ

1

Возможно, нет та 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

Привет, Cade, я изменил запрос – Sam

+0

@Sam, и что случилось? он все еще не работает? –

+0

Привет, Кейд, Спасибо, что сейчас работает нормально. – Sam

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 В таблице (или вид) на самом деле не существует Пользователь базы данных не имеет разрешение на доступ (или изменение) таблицы

+0

Привет, Синдху, спасибо за ур ответ. Таблица существует, и пользователь базы данных является владельцем таблицы, так как я вижу ее, она может изменяться, и я могу сделать это вне процедуры. Проблема в том, что я пытаюсь выполнить немедленное, это не работает. Есть ли какая-либо синтаксическая ошибка, которую я не вижу. Я новичок в PL/SQL, поэтому я не уверен, что мне не хватает. – Sam

Смежные вопросы