Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Trigger problem
Barbara,
maybe U can help me more.
Simplify I got 2 table.
EXTERNAL and REAL (are the same from my POST).
In real I made a foreign key on ID of external. When I try an INSERT I got an error for the foreign key on REAL.
I think 'cause the trigger ON EXTERNAL try to insert the ID on REAL on
scope BEFORE INSERT.
If I delete the foreign key all works fine.
The is a way or an workaround for use a foreign key with this trigger
CREATE OR REPLACE TRIGGER "BEF_TBLAPPSTAMPAFATTURE"
BEFORE INSERT
ON "TABAPPOGGIOSTAMPAFATTURE"
FOR EACH ROW
DECLARE
v_SeqMamma NUMBER; v_SeqFiglia NUMBER; v_RAGIONESOCIALE varchar2(50); v_INDIRIZZO varchar2(50); v_CAP varchar2(5); v_CITTA varchar2(50); v_PROVINCIA varchar2(2); v_PIVA varchar2(11); v_CODICESIGMA varchar2(20); v_DESCRIZIONECOMMESSA varchar2(4000); v_NUMORDINECLIENTE varchar2(4000); v_FILIALE varchar2(50); v_COMMERCIALE varchar2(60); v_DESATTIVITA varchar2(4000); v_QUANTITA number(3); v_PREZZO number(10,3); v_TOTRIGALISTINO number(10,3); v_IVA number(10,3); v_IMPONIBILEPIUIVA number(10,3); v_TIPOLOGIAPAGAMENTO varchar2(200);
BEGIN
--Per ID della tabella appoggio SELECT NVL(MAX(IDAPPOGGIOSTAMPAFATTURA),0)+1 INTO v_SeqMamma FROM TABAPPOGGIOSTAMPAFATTURE; :NEW.IDAPPOGGIOSTAMPAFATTURA := v_SeqMamma; --Per ID della tabella reale delle attivitą da fatturare SELECT NVL(MAX(IDTABSTAMPAFATTURA),0)+1 INTO v_SeqFiglia FROM TABSTAMPAFATTURE; SELECT INITCAP(MAX(cli.RAGSOC)) RAGSOC, INITCAP(MAX(cli.INDIRIZZO)) INDIRIZZO, MAX(cli.CAP) CAP, INITCAP(MAX(cli.CITTA)) CITTA, TRIM(MAX(cli.PROVINCIA)) PROVINCIA, MAX(cli.PARTITAIVA) PARTITAIVA, MAX(cli.CODSIGMA) CODSIGMA, MAX(comm.DESCRIZIONE) DESCRIZIONE, MAX(comm.NUMORDINECLIENTE) NUMORDINECLIENTE, MAX(anacomm.FILIALE) FILIALE, Trim(MAX(anacomm.NOME))||' '||Trim(MAX(anacomm.COGNOME)) RiferimentoCommerciale, MAX(lis.DESATTIVITA) DESATTIVITA, TO_NUMBER(MAX(lis.QUANTITA)) QUANTITA, TO_NUMBER(MAX(lis.PREZZO)) PREZZO, TO_NUMBER(MAX(lis.QUANTITA)*MAX(lis.PREZZO)) TotRiga, TO_NUMBER(((MAX(lis.QUANTITA)*MAX(lis.PREZZO))/100)*20) IVA, TO_NUMBER((MAX(lis.QUANTITA)*MAX(lis.PREZZO)+((MAX(lis.QUANTITA)*MAX(lis.PREZZO))/100)*20)) ImponibileConIva, MAX(pag.DescrizionePagamento) DescrizionePagamento, TO_NUMBER(MAX(pag.GIORNI)) PostfatturazioneGiorni, TO_NUMBER(MAX(pag.FINEMESE)) FineMese INTO v_RAGIONESOCIALE, v_INDIRIZZO, v_CAP, v_CITTA, v_PROVINCIA, v_PIVA, v_CODICESIGMA, v_DESCRIZIONECOMMESSA, v_NUMORDINECLIENTE, v_FILIALE, v_COMMERCIALE, v_DESATTIVITA, v_QUANTITA, v_PREZZO, v_TOTRIGALISTINO, v_IVA, v_IMPONIBILEPIUIVA, v_TIPOLOGIAPAGAMENTO, v_POSTGIORNI, v_FINEMESE FROM TABDATIFATTURAZIONE fatt, TABLISTINI lis, TABTESTATACOMMESSE comm, TABANAGRAFICACLIENTI cli, TABANAGRAFICACOMMERCIALI anacomm, TABTIPOPAGAMENTO pag WHERE TRIM(fatt.NUMEROCOMMESSA) = :NEW.NUMEROCOMMESSA AND TRIM(fatt.PROGRIGA) = :NEW.PROGRIGA AND TRIM(fatt.PROGRIGAFATTURA) = :NEW.PROGRIGAFATTURA AND TRIM(fatt.MESE) = :NEW.Mese AND fatt.NUMEROCOMMESSA = lis.NUMEROCOMMESSA AND fatt.PROGRIGA = lis.PROGRIGA AND comm.NUMEROCOMMESSA = lis.NUMEROCOMMESSA AND comm.TIPOPAGAMENTO = pag.PROGPAGAMENTO AND comm.PROGCLIENTE = cli.PROGCLIENTE AND cli.PROGCOMMERCIALE = anacomm.PROGCOMMERCIALE GROUP BY fatt.MESE; INSERT INTO TABSTAMPAFATTURE (IDAPPOGGIOSTAMPAFATTURA,IDTABSTAMPAFATTURA, NUMEROCOMMESSA, PROGRIGA, PROGRIGAFATTURA, MESE, DATAUNIFICATRICESELEZIONE, RAGIONESOCIALE, INDIRIZZO, CAP, CITTA, PROVINCIA, PIVA, FILIALE, COMMERCIALE, DESCRIZIONECOMMESSA, NUMORDINECLIENTE, CODICESIGMA, TIPOLOGIAPAGAMENTO, POSTGIORNI, FINEMESE, DESATTIVITA, QUANTITA, PREZZO, TOTRIGALISTINO, IVA, IMPONIBILEPIUIVA) VALUES
( v_SeqMamma, v_SeqFiglia,
:NEW.NUMEROCOMMESSA,
:NEW.PROGRIGA,
:NEW.PROGRIGAFATTURA,
:NEW.MESE,
:NEW.DATAUNIFICATRICESELEZIONE,
v_RAGIONESOCIALE, v_INDIRIZZO, v_CAP, v_CITTA, v_PROVINCIA, v_PIVA, v_FILIALE, v_COMMERCIALE, v_DESCRIZIONECOMMESSA, v_NUMORDINECLIENTE, v_CODICESIGMA, v_TIPOLOGIAPAGAMENTO, v_POSTGIORNI, v_FINEMESE, v_DESATTIVITA, v_QUANTITA, v_PREZZO, v_TOTRIGALISTINO, v_IVA, v_IMPONIBILEPIUIVA );