【问题标题】:How can I loop inside an Update statement?如何在 Update 语句中循环?
【发布时间】:2018-11-03 22:48:54
【问题描述】:

我想在 UPDATE 语句中循环。有可能这样做吗?它在“rec”变量中给了我一个错误。如果不能,你能告诉我我该怎么做。这是我的代码,我尝试执行 SELECT 以使用所有变量更新所有行。

         BEGIN
            UPDATE DATMCCN0
                SET E_NOME = (
                FOR rec IN(SELECT IID FROM DATMCCN0)
                LOOP
                SELECT I_NOME FROM DAT_CCNCONFIG0 INNER 
JOIN DATMCCN0 ON DAT_CCNCONFIG0.I_NOME = DATMCCN0.CAPLIC 
    where DATMCCN0.IID = rec.IID) 
                END LOOP;
            END;

【问题讨论】:

  • 你不要在里面循环。根本不需要循环来更新行。但是,如果必须,您可以在循环内循环和更新。例如,开始...循环...更新...结束循环;在此处查看 Update... SELECT.. 的示例:techonthenet.com/oracle/update.php 另请阅读 Oracle 文档。此处和网络上有大量示例可用于通过 select 或 update inside loop 进行更新。
  • 你们都不明白我的问题
  • 可能会显示输入数据的示例,以及您希望从此更新中获得的结果示例。目前尚不清楚您到底想得到什么,您在问题中显示的陈述完全是错误的,无法编译。很难猜测看到错误的代码而不是正常工作的代码应该做什么。
  • @jose 而不是做出诸如“你们都不理解我的问题”之类的非建设性陈述,也许最好改进您的问题以帮助我们(他们不了解您的问题)通过提供minimal reproducible example 来理解您想要实现的目标的英文描述(不是代码)、一些示例数据(如 DDL/DML 语句)和您的预期结果。我们是志愿者,粗鲁无礼不利于让我们自愿抽出时间来帮助您而不是其他人。

标签: oracle plsql


【解决方案1】:

使用MERGE 声明:

MERGE INTO DATMCCN0 dst
USING DAT_CCNCONFIG0 src
ON (
      src.IID    = dst.IID
  AND src.I_NOME = dst.CAPLIC
)
WHEN MATCHED THEN
  UPDATE SET E_NOME = src.I_NOME;

或者,取决于你的逻辑:

MERGE INTO DATMCCN0 dst
USING (
  SELECT b.IID,
         /* MAX(I_NOME) AS */ I_NOME
  FROM   DAT_CCNCONFIG0 a
         INNER JOIN DATMCCN0 b
         ON a.I_NOME = b.CAPLIC
  -- GROUP BY b.IID
) src
ON ( src.IID = dst.IID)
WHEN MATCHED THEN
  UPDATE SET E_NOME = src.I_NOME;

【讨论】:

    【解决方案2】:

    您可能正在尝试做一个correlated update

    UPDATE datmccn0 ccn 
    SET    e_nome = (SELECT i_nome 
                     FROM   dat_ccnconfig0 conf 
                     WHERE  ccn.i_nome = conf.caplic 
                            AND ccn.iid = conf.iid); 
    

    这个语句应该可以解决你的问题。

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 2019-05-15
      • 2018-03-02
      • 2013-04-08
      • 2014-12-14
      • 2011-05-08
      • 2019-05-06
      • 2021-04-30
      • 2017-03-23
      相关资源
      最近更新 更多