PDA

View Full Version : [Oracle-PL/SQL] Trigger: esistono i recordset?


Quincy_it
05-04-2004, 15:20
Salve a todos,
avrei bisogno di aiuto. :p

Praticamente devo creare un trigger in Oracle (8i) che, in base ad una SELECT, potrebbe restituire "n" righe. Devo poi scorrere questi valori e in base al contenuto di un campo devo fare o meno un'INSERT.
Per l'ultima parte no problem, il problema invece è che non so se esistono una specie di oggetti Recordset in Oracle. Come faccio poi a scorrere tra i valori?
Avevo pensato anche a creare una vista o tabella temporanea, scrivere lì i valori risultanti dalla SELECT e poi alla fine cancellarla, ma mi sembra uno spreco di risorse.

Grazie :)

mailand
05-04-2004, 17:39
non potresti creare una procedura e definire un cursore? se hai una chiave primaria la cosa non dovrebbe essere difficile...

Quincy_it
05-04-2004, 17:52
Originariamente inviato da mailand
non potresti creare una procedura e definire un cursore? se hai una chiave primaria la cosa non dovrebbe essere difficile...

Cioè? Scusa ma sto lavorando su Oracle per la prima volta proprio in questi giorni.. :p

mailand
05-04-2004, 17:56
fammi capire meglio... i dati da inserire sono in 2 tabelle differenti con alcuni campi comuni? questi campi comuni hanno una chiave univoca? (ovvero una colonna o una combinazione di + colonne i cui valori NON POSSONO essere duplicati)

Quincy_it
05-04-2004, 18:00
Allora:
devo controllare tramite una SELECT il valore di un campo da una tabella A. Ma da questa QUERY possono venire fuori 0, 1 o "n" record. La QUERY sulla tabella A prende in considerazione vari campi, tra cui la PK di quella tabella (ma non è nella condizione WHERE).
Nel caso poi che vengano fuori "n" record, devo controllare quante volte compare un determinato valore sullo stesso campo in tutto il "recordset". A seconda di questo dovrò fare (o meno)un'INSERT in un'altra tabella B.

E' più chiaro così? :)

mailand
05-04-2004, 18:11
si è decisamente più chiaro adesso... ti ho consigliato una soluzione non ottimale con un cursore, sarebbe un po' complesso specie se non hai molta mano.
purtroppo sui trigger non so aiutarti, dato che per "politica" aziendale non li usiamo (già li usavo poco prima, adesso 0 proprio, mi dispiace...)

ma se fai una select count del campo, assegni il valore ad una variabile e fai eseguire una insert se questo valore è maggiore di un valore dato o del valore della tabella di destinazione?

in questo caso potresti definire le 2 variabili con una select count <testoquery> into <nomevariabile1>, farlo sulla seconda tabella, e usare l'istruzione case -- when quando non hai l'uniformità sulle 2 variabili...

non so se possa esserti d'aiuto

Quincy_it
05-04-2004, 21:51
Alla fine ho scoperto il "magico mondo dei cursori", e tra un IF e l'altro dovrei essere riuscito a fare qualcosa. :)

Grazie tante!:)

mailand
06-04-2004, 09:15
di nulla!
in effetti sono abbastanza pratici... :)