| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Trigger problem
I can only guess that your trigger is inserting null values because
your cursor is selecting null values. I would need some create table
and insert statements for sample data and an insert statement that
fires the trigger and results in null values, in order to test the
problem.
However, I can tell you that you should not be selecting from the same table that the trigger is on, from within the trigger. Instead of selecting the maximum value and adding one, you should be using a sequence.
You can also greatly simplify your trigger. The cursors are not necessary.
Please see the suggested code below.
SELECT INITCAP (MAX (cli.RAGSOC)) RAGSOC,
INITCAP (MAX (cli.INDIRIZZO)) INDIRIZZO,
MAX (cli.CAP) CAP,
INITCAP (MAX (cli.CITTA)) CITTA,
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,
MAX (lis.QUANTITA) QUANTITA,
MAX (lis.PREZZO) PREZZO,
MAX (lis.QUANTITA)
* MAX (lis.PREZZO) TotRiga,
((MAX (lis.QUANTITA)
* MAX (lis.PREZZO))
/ 100) * 20 IVA,
(MAX (lis.QUANTITA)
* MAX (lis.PREZZO)
+ ((MAX (lis.QUANTITA)
* MAX (lis.PREZZO))
/ 100) * 20) ImponibileConIva,
MAX (pag.DescrizionePagamento) DescrizionePagamento,
MAX (pag.GIORNI) PostfatturazioneGiorni,
MAX (pag.FINEMESE) FineMese
INTO :NEW.RAGIONESOCIALE,
:NEW.INDIRIZZO,
:NEW.CAP,
:NEW.CITTA,
:NEW.PROVINCIA,
:NEW.PIVA,
:NEW.CODICESIGMA,
:NEW.DESCRIZIONECOMMESSA,
:NEW.NUMORDINECLIENTE,
:NEW.FILIALE,
:NEW.COMMERCIALE,
:NEW.DESATTIVITA,
:NEW.QUANTITA,
:NEW.PREZZO,
:NEW.TOTRIGALISTINO,
:NEW.IVA,
:NEW.IMPONIBILEPIUIVA,
:NEW.TIPOLOGIAPAGAMENTO,
:NEW.POSTGIORNI,
:NEW.FINEMESE
FROM TABDATIFATTURAZIONE fatt,
TABLISTINI lis,
TABTESTATACOMMESSE comm,
TABANAGRAFICACLIENTI cli,
TABANAGRAFICACOMMERCIALI anacomm,
TABTIPOPAGAMENTO pag
WHERE fatt.NUMEROCOMMESSA = TRIM (:NEW.NumeroCommessa)
AND fatt.PROGRIGA = TRIM (:NEW.ProgRiga)
AND fatt.PROGRIGAFATTURA = TRIM (:NEW.ProgRigaFattura)
AND fatt.MESE = TRIM (: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;
![]() |
![]() |