Как я могу выполнить цикл внутри оператора Update? - PullRequest
0 голосов
/ 24 мая 2018

Я хочу зациклить внутри оператора 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;

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Используйте выражение 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;
0 голосов
/ 24 мая 2018

Возможно, вы пытаетесь выполнить коррелированное обновление .

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

Это утверждение должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...