sql >> Database >  >> RDS >> Oracle

Oracle:CTE gebruiken met updateclausule

Nou, het gaat er niet om of je het zou kunnen of niet. Het gaat erom of je het moet doen of niet. In uw zoekopdracht zie ik geen filtercriteria. Wilt u alle rijen bijwerken? Ik zie geen behoefte aan CTE in jouw geval.

Wanneer heb je een CTE nodig? , d.w.z. een with-clausule als factoringmethode voor subquery's wanneer u een scenario hebt waarin de subquery meerdere keren wordt uitgevoerd. U gebruikt een WITH-component om ervoor te zorgen dat de subquery één keer wordt uitgevoerd en dat de resultatenset wordt opgeslagen als een tijdelijke tabel.

Ja, je zou MET . kunnen gebruiken clausule voor een UPDATE uitspraak.

Bijvoorbeeld,

UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM 
                                       (
                                        WITH cte AS(
                                   SELECT ... FROM another_table
                                                 )
                                         SELECT * FROM cte
                                        )

Je zou een MERGE . kunnen gebruiken verklaring GEBRUIK de MET clausule.

Bijvoorbeeld,

SQL> MERGE INTO emp e USING
  2  (WITH average AS
  3    (SELECT deptno, AVG(sal) avg_sal FROM emp group by deptno)
  4  SELECT * FROM average
  5  ) u
  6  ON (e.deptno = u.deptno)
  7  WHEN MATCHED THEN
  8  UPDATE SET e.sal      =
  9    CASE
 10      WHEN e.sal <= u.avg_sal
 11      THEN e.sal * 1.05
 12      ELSE e.sal * 1.03
 13    END
 14  /

14 rows merged.

SQL>


  1. Hoe ga ik om met aanhalingstekens' in SQL

  2. XAMPP - Fout:MySQL wordt onverwacht afgesloten

  3. Waarschuwing:session_start():kan geen sessiecookie verzenden - headers zijn al verzonden door (uitvoer gestart om

  4. Oracle SYS_GUID verandert niet