Ho una dichiarazione di aggiornamento mostrata di seguito che funziona bene, ho usato un'istruzione with nella sottoquery per migliorare notevolmente le prestazioni, ma per qualche motivo non sono autorizzato ad aggiungere una colonna aggiuntiva dalla stessa tabella per l'aggiornamento.Perché non posso aggiornare più di una colonna allo stesso tempo usando Con parola chiave?
Works:
UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One
FROM Table_Two t, Table_A a
WHERE t.id = a.New_Id))
SELECT Col_One FROM OneValue);
Quello che mi piacerebbe fare è solo inserire un'altra colonna di aggiornare anche da table_two come questo
UPDATE Table_A SET (Col_One, Col_Two) = (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two
FROM Table_Two t, Table_A a
WHERE t.id = a.New_Id))
SELECT Col_One, Col_Two FROM OneValue);
ma ottengo ORA-01767 aggiornamento set espressione deve essere una subquery. Capisco questo errore ma non riesco a vedere come lo sto generando. Qualsiasi aiuto è molto apprezzato.
Grazie in anticipo.
Non vedo alcun motivo per cui le prestazioni trarrebbero vantaggio dalla clausola di factoring dei subquery. Controlla i piani di esecuzione per vedere se c'è una differenza. –
Ben nuovo per la codifica, non sono sicuro di poter rispondere correttamente, tranne per dire che stavo avendo problemi con le prestazioni della tabella 2, che è un tavolo molto grande. Mi sono guardato intorno e ho trovato alcune utili informazioni sull'ottimizzazione dell'aggiornamento tramite askTom [link] (http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::1111_QUESTION_ID:288016031632), applicato alla mia situazione e le prestazioni sono passate da> 5 minuti a <10 secondi. – dee
+1 per guardare a asktom, ma -1 per non seguire la filosofia esposta lì :) Dai un'occhiata a come fa i confronti delle prestazioni. Utilizzare DBMS_Xplan per ottenere piani di esecuzione per le query e cercare le differenze e fare attenzione a una seconda query che beneficia della memorizzazione nella cache dei dati –