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

4

2 回答 2

1

如果我查看要求,我看不到 PL/SQL 的要求。更好的方法是使用 Merge。我在下面举例说明了一个例子。如果动态 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;
于 2015-12-21T07:04:26.750 回答
0

这个 SO帖子有一个类似问题的答案。

在您的情况下,查询将转换如下

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
           )';
于 2015-12-21T04:10:40.313 回答