mise à jour à l'aide de la boucle en plsql

je vais avoir des problème de mise à jour et l'insérer en dessous de la colonne. Veuillez aviser sur ce.

C'est l'entrée

depnto   extra    comm
----------------------------
20       300      NULL
20       300      400
20       NULL     NULL
20       500      NULL

C'est la sortie attendue de

depnto  Extra    comm
---------------------
20      300      300
20      300      400
20      NULL     NULL           
20      500      500

J'ai besoin de mettre à jour comm colonne avec extra colonne ci-dessous les conditions.

  • Si comm Est null, la valeur supplémentaire est mis à jour pour la comm.
  • Si comm n'Est pas nul, pas besoin de mise à jour,
  • Si les deux sont nuls, laissez null,
  • si comm colonne a une valeur pas besoin de le remplacer.

Mon programme est ci-dessous. Même que j'ai besoin de garder une trace, qui sont des lignes de mise à jour et à quelle valeur dans une autre table.

PROCEDURE (dept_id )
AS
BEGIN
   FOR r IN (SELECT *
               FROM emp
              WHERE comm IS NULL AND extra IS NOT NULL AND deptno = dept_id)
   LOOP
      UPDATE emp
         SET comm = extra
       WHERE comm IS NULL AND extra IS NOT NULL AND deptno = dept_id;



      INSERT INTO changed_comm (deptno, oldval, newval)
           VALUES (dept_id, r.comm, r.extra);
   END LOOP;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      NULL;
END;

veuillez fournir des avis sur ci-dessus. Sa n'insérez pas correctement.

OriginalL'auteur user2686661 | 2013-09-07