Newsgroup: it.comp.software.database
Titolo: allineare classi di dati in una tabella

Su una tabella Oracle 8.1.7.3, ho il seguente problema:
i codici (chiave primaria) hanno una parte letterale seguita da un
numero progressivo; quelli con la stessa parte letterale li identifico
con una "classe" (che e' un oggetto virtuale che non esiste in db)
Avrei la necessita' di allineare i dati di una classe ad ogni modifica
di un suo membro (intendo che se faccio l'update di un campo in un
record devo farlo anche su tutti gli altri records della stessa
classe)
Ho provato a gestirlo con un trigger, ma ho il problema della tabella
mutante (e il PRAGMA AUTONOMUS_TRANSACTION, per vari motivi, non e'
applicabile), ed inoltre il trigger mi scatterebbe ricorsivamente.
Ho provato anche a crearmi una materialized view (fast refresh on
commit) e ad inserire li' il trigger, ma mi da' il seguente errore
sulla commit:
ERROR at line 1:
ORA-12033: cannot use filter columns from snapshot log on
"SCHEMA"."TABELLA"
(sostanzialmente perche' inserisco nuovi records nella tabella master
mentre eseguo l'aggiornamento, avrei inoltre anche l'ulteriore
problema di committare i cambiamenti, qui evito la ricorsione mettendo
dei controlli per fare l'update solo quando serve)
In che altro modo posso fare? Premesso che devo gestire tutto in
database perche' in questa fase non posso piu' modificare gli
applicativi
Greetings,
Alessandro Trebbi
Pesaro, Italy
http://www.b3soft.com

Potresti postare il trigger che hai realizzato, o almeno la parte di esso in
cui aggiorni i dati della classe?
Non credo di poterti aiutare, ma non si sa mai... ;)
Saluti,
Ender

 applicativi
Non ho capito un granchč...
cmq... se con triggers e menate varie non ci riesci
due soluzioni
a) wrappi tutto dentro una SP e fai fare tutto alla SP
(io lo dico sempre che gli applicativi il codice SQL non lo
devono manco vedere...) se questo non lo puoi fare...
b) tabella temporanea su disco e fai gestire tutto da una
seconda SP fatta scattare (asincronamente) dal trigger sulla
tabella principale
c) dai un occhiata al package dbms_pipe (io non ho afferrato
bene il problema e forse per te puň essere illuminante)
/G

 wrote in message
news:arnfuc$1dmp$1...@newsreader1.mclink.it...

Non ho sottomano niente quindi rimando a lunedi' le prove;
non ho capito come posso far scattare asincronamente il trigger (neanche
cosa vuol dire, per la verita') per fare una cosa del genere io ho fatto lo
snapshot aggiornato al commit con relativo trigger ma ho comunque problemi.
Comunque il problema, per spiegarmi meglio, e' che ho un applicativo che al
momento fa insert e update su singolo record, io avrei bisogno di lavorare
su un insieme di records allineando i campi modificati (lavorando solo su
DB)


 DB)
Insomma tu stai dicendo che logicamente aggiorni una solo record, ma
in realtà vuoi che tutti i record "correlati" a quello aggiornato si
aggiornino di conseguenza e qui record stanno sulla stesso oggetto...
ok ok... inizia ad essermi chiara la cosa...
un problema simile con il "mutating table" mi era capitato tempo
addietro...
L'unica soluzione o almeno quella che si utilizza di solito
è la seguente
a) before insert che popola una tabella temporanea con i dati che
vuoi modificare dopo
b) after insert che controlla i record nella tabella temporanea
e fa:
   *) controllo logico se i dei dati da inserire stanno gia nella
tabella temporanea
   *) aggiorna i record di conseguenza
c) ucccidi chi ha disegnato il dibbi, sti errori vengono fuori
1000 volte su 100 perchè il disegno è una merda
et voilat...
la tabella temporanea puoi farla in due modi
a) oggetto fisico su db
b) package pl/sql con oggetti di tipo riga che bufferizzano
il dovuto
Buon pl/sql,
/G

    *) aggiorna i record di conseguenza
Ho il problema che il trigger non puo' accedere alla tabella perche'
e' in modifica. Ora faccio una prova trasformando in una vista ed
utilizzando un trigger INSTEAD OF (non ho ancora capito perche' questo
trigger non si possa usare per una tabella)


 e' in modifica. Ora faccio una prova trasformando in una vista ed
Con il before insert le modifiche nella tavola ancora non sono
iniziate...
/G