sql >> Database teknologi >  >> RDS >> Oracle

Oracle:Bruger CTE med opdateringsklausul

Nå, det handler ikke om, hvorvidt du kunne gøre det eller ej. Det handler om, hvorvidt du skal gøre det eller ej. I din forespørgsel kan jeg ikke se nogen filterkriterier. Vil du opdatere alle rækkerne? Jeg ser ikke et behov for CTE i dit tilfælde.

Hvornår har du brug for en CTE , dvs. en med klausul som en underforespørgselsfaktoreringsmetode, når du har et scenarie, hvor underforespørgslen udføres flere gange. Du bruger en WITH-klausul for at sikre, at underforespørgslen udføres én gang, og at resultatsættet er gemt som en midlertidig tabel.

Ja, du kunne bruge WITH klausul for en OPDATERING udmelding.

For eksempel,

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

Du kan bruge en FLETT erklæring BRUGER MED klausul.

For eksempel,

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. Hvordan man sporer hvilke tabeller/visninger/etc. afhænger af en tabel i Oracle

  2. Sådan konverteres mellem datoformater i SQL Server ved hjælp af CAST()

  3. Hvordan orden efter klausul fungerer i mysql, bestilling viser mærkelig adfærd

  4. Returnerer en liste over alle brugere, parret med deres mest populære følger. Jo flere følgere nogen har, jo mere populære er de