Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在Update语句中循环?_Oracle_Plsql - Fatal编程技术网

Oracle 如何在Update语句中循环?

Oracle 如何在Update语句中循环?,oracle,plsql,Oracle,Plsql,我想在UPDATE语句中循环。有可能吗?它在“rec”变量中给了我一个错误。如果没有,你能告诉我怎么做吗。这是我的代码,我尝试在其中进行选择,以便用所有变量更新所有行 BEGIN UPDATE DATMCCN0 SET E_NOME = ( FOR rec IN(SELECT IID FROM DATMCCN0) LOOP SE

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

         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;

你可能正在尝试做一件事


此语句可以解决您的问题。

使用
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;

你不能在里面打圈。根本不需要循环来更新行。但如果必须这样做,您可以在循环中循环和更新。例如,开始。。。环使现代化端环;在这里查找更新的示例。。。选择..:还可以阅读Oracle文档。在这里和网络上有大量的示例可供使用select或update INDER loop进行更新。可能有重复的示例,但没有人理解我的问题可能会显示输入数据的示例,以及您希望从此更新中获得的结果的示例。目前还不清楚您到底想要得到什么,您在问题中给出的陈述完全是错误的,无法编译。很难猜测看到错误的代码而不工作的代码有什么好处。@jose与其说“你们都不理解我的问题”,不如改进你们的问题来帮助我们(他们对你们的问题并不了解)通过提供一个包含您试图实现的目标的英文描述(而不是代码)的示例数据(如DDL/DML语句)和您的预期结果来理解。我们是志愿者,粗鲁无益于让我们自愿花时间帮助你而不是其他人。
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;