PL/SQL :立即执行更新


     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 的要求 这。 更好的方法是使用合并。我已经说明了一个 下面的示例。如果动态 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;

这篇文章对一个类似的问题有一个答案。

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

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
           )';

相关内容

  • 没有找到相关文章

最新更新