0 voti
118 visite
quesito posto in SQL e PLSQL da (120 punti)
cambiato categoria da
Salve,

Dovrei fare l'update di una tabella e modificare un campo (da valore N a valore S). Il problema e che tabella e campo sono replicate su più schemi diversi inseriti nella stessa istanza.

Come potrei fare? Ho provato ad iscrivere una query annidata ma non ha funzionato, avete qualche suggerimento?

Grazie.

1 Risposta

0 voti
risposta inviata da (2.4k punti)
In questo caso devi a mio avviso scrivere query dinamiche da lanciare con execute immediate.

Per non duplicare codice potresti per esempio sfruttare un cursore for loop che fa una query sulla all_tables per table_name e selezionarti l'owner.

All'interno del loop lanci le tue execute immediate con l'update costruito dinamicamente.

Non amo sql dinamico ma non vedo alternative.
commentato da (120 punti)
Grazie per la risposta.
commentato da (120 punti)
Ho provato, ma evidentemente non sono molto ferrato sui cursori, sarebbe possibile un esempio pratico?
Grazie mille.
commentato da (2.4k punti)
Nella DECLARE fai un cursore di questo tipo:
CURSOR mycur IS
SELECT OWNER, TABLE_NAME
FROM all_tables
WHERE table_name = 'nome tabella maiuscolo';

Poi nel BEGIN fai:
FOR res IN mycur LOOP
  EXECUTE IMMEDIATE ...
END LOOP;

Il pezzo dopo execute immediate sarà una stringa sql costruita dinamicamente. Puoi accedere allo schema tramite la variabile res.owner all'interno del loop.

Domande correlate

0 voti
0 risposte 2.8k visite
0 voti
1 risposta 169 visite
quesito posto 21 Agosto 2018 in SQL e PLSQL da brunoalfonsi (120 punti)
0 voti
0 risposte 428 visite
0 voti
0 risposte 4.6k visite
0 voti
0 risposte 351 visite
...