sql >> Databáze >  >> RDS >> Oracle

Oracle:Použití CTE s aktualizační doložkou

No, nejde o to, jestli to dokážeš nebo ne. Jde o to, jestli to musíte udělat nebo ne. Ve vašem dotazu nevidím žádná kritéria filtru. Chcete aktualizovat všechny řádky? Nevidím potřebu CTE ve vašem případě.

Kdy potřebujete CTE , tj. klauzule s jako metoda faktoringu dílčího dotazu, kdykoli máte scénář, kdy se dílčí dotaz provádí vícekrát. Pomocí klauzule WITH zajistíte, že poddotaz bude proveden jednou a sada výsledků bude uložena jako dočasná tabulka.

Ano, můžete použít WITH klauzule pro UPDATE tvrzení.

Například,

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

Můžete použít SLOUČENÍ výpis POUŽÍVÁNÍ WITH doložka.

Například,

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. CHYBA:neukončený řetězec v uvozovkách na nebo blízko

  2. Rozdíl mezi použitím REFERENCES s CIZÍM KLÍČEM a bez něj?

  3. PLSQL generuje náhodné celé číslo

  4. Doporučený přístup k vložení mnoha řádků pomocí Castle ActiveRecord a ignorování jakýchkoli dup