2015-12-21 3 views
0
 V_SQL4 := 'UPDATE EMP_TABLE m 
    Set m.name = mft.name, 
     m.age = mft.age, 
     m.dept = mft.dept, 
    Where m.id = mft.id and 
     (m.name != mft.name Or 
     m.age != mft.age Or 
     m.dept != mft.dept)'; 

DBMS_OUTPUT.PUT_LINE(V_SQL4); 

EXECUTE IMMEDIATE V_SQL4; 

Как и где объявить временную таблицу EMP_TMP как mft в заявлении?pl/sql: выполнить немедленное обновление?

ответ

0

У этого SO post есть ответ на аналогичный вопрос.

В вашем случае запрос будет преобразование, как показано ниже

V_SQL4 := 'UPDATE EMP_TABLE m 
SET (name, age, dept) = (SELECT mft.name 
           ,mft.age 
           ,mft.dept 
          FROM EMP_TMP mft 
          WHERE m.id = mft.id 
          AND m.name != mft.name Or 
          AND m.age != mft.age Or 
          AND m.dept != mft.dept 
         ) 
WHERE EXISTS (
       SELECT 1 
       FROM EMP_TMP mft 
       WHERE m.id = mft.id 
      )'; 
1

Если я смотрю в требование я не вижу Requirment из PL/SQL в этом. Лучше использовать Merge. Ниже я рассмотрел пример . Если Dynamic SQL не является жестким и связанным, вы также можете использовать этот . Позвольте мне знать, если это помогает.

MERGE INTO EMP_TABLE m USING EMP_TMP mft 
ON (m.id = mft.id AND (m.name != mft.name OR m.age != mft.age OR m.dept != mft.dept)) 
WHEN MATCHED THEN 
    UPDATE SET 
    m.name = mft.name, 
    m.age = mft.age, 
    m.dept = mft.dept; 
Смежные вопросы