salve a tutti, sono sempre alle prese con questo maledetto database sul parlamento.
ho realizzato questo script per il popolamento dele tabelle, dove dopo l'inserimento di una tupla nella tabella presenze, dovrebbe scattare un trigger che aggiorna la vista materializzata LISTA_NERA_VM.

vi posto lo script, il trigger e quanto necessario ai fini della discussione:

codice:
DELETE FROM REPOSITORYADM.APPROVAZIONI;
DELETE FROM REPOSITORYADM.PRESENZE;
DELETE FROM REPOSITORYADM.LEGIS_PARL;
DELETE FROM REPOSITORYADM.MOZIONI;
DELETE FROM REPOSITORYADM.ATT_PARLAMENTARI;
DELETE FROM REPOSITORYADM.PARL_MISSIONE;
DELETE FROM REPOSITORYADM.DESTINAZIONI;
DELETE FROM REPOSITORYADM.MISSIONI;
DELETE FROM REPOSITORYADM.NOTE_SPESE;
DELETE FROM REPOSITORYADM.PARLAMENTARI;
DELETE FROM REPOSITORYADM.MODIFICHE;
DELETE FROM REPOSITORYADM.INFORMAZIONI_TESTI;
DELETE FROM REPOSITORYADM.LEGGI;
DELETE FROM REPOSITORYADM.LEGISLATURE;


/*INSERT INTO REPOSITORYADM.LEGISLATURE
(NUMERO_PROGRESSIVO, DATA_INIZIO, DATA_FINE)
VALUES
('XVII', '01-MAR-2013', NULL);

INSERT INTO REPOSITORYADM.LEGISLATURE
(NUMERO_PROGRESSIVO, DATA_INIZIO, DATA_FINE)
VALUES
('XVI', '01-MAR-2008', '28-FEB-2013');

INSERT INTO REPOSITORYADM.PARLAMENTARI
(ID_PARLAMENTARE, NOME, COGNOME, DATA_NASCITA, LUOGO_NASCITA, PARTITO, CIRCOSCRIZIONE)
VALUES
('000000', 'PIETRO', 'LAFORGIA', '13-SET-1983', 'CERIGNOLA', 'PD', 'PUGLIA');

UPDATE REPOSITORYADM.LEGIS_PARL
SET TIPO = 'DEPUTATO' WHERE PARL_ID = '000000';

INSERT INTO REPOSITORYADM.PARLAMENTARI
(ID_PARLAMENTARE, NOME, COGNOME, DATA_NASCITA, LUOGO_NASCITA, PARTITO, CIRCOSCRIZIONE)
VALUES
('000001', 'NUNZIO', 'LAFORGIA', '28-MAG-1957', 'CERIGNOLA', 'PDL', 'MOLISE');

UPDATE REPOSITORYADM.LEGIS_PARL
SET TIPO = 'SENATORE' WHERE PARL_ID = '000001';

INSERT INTO REPOSITORYADM.PARLAMENTARI
(ID_PARLAMENTARE, NOME, COGNOME, DATA_NASCITA, LUOGO_NASCITA, PARTITO, CIRCOSCRIZIONE, SENATORE_A_VITA, PDR)
VALUES
('000002', 'LEONARDA', 'TOTARO', '19-MAG-1961', 'CERIGNOLA', 'M5S', 'CAMPANIA', 'SI', 'G. NAPOLITANO');

UPDATE REPOSITORYADM.LEGIS_PARL
SET TIPO = 'SENATORE' WHERE PARL_ID = '000002';*/

INSERT INTO REPOSITORYADM.PRESENZE
VALUES
('000000', '10-GIU-2013', 'XVII');

INSERT INTO REPOSITORYADM.PRESENZE
VALUES
('000001', '11-GIU-2013');

INSERT INTO REPOSITORYADM.PRESENZE
VALUES
('000002', '11-GIU-2013');

INSERT INTO REPOSITORYADM.LEGGI
(TITOLO, TESTO, RELATORE, LEG_NUMERO, ABROGATA, APPR_CAMERA, APPR_SENATO, VOTI_FAV, VOTI_AST, VOTI_CON, TIPO_VOTO)
VALUES
('LEGGE DEL 10-GIU-2013', 'BLA BLA BLA', 'TIZIO CAIO', 'XVII', 'NO', '10-GIU-2013', '11-GIU-2013', 2, 1, 0, 'SEGRETO');

UPDATE REPOSITORYADM.APPROVAZIONI
SET VOTO_DATO = 'FAV' WHERE (PARL_ID = '000000' AND (LEGGE_TITOLO = 'LEGGE DEL 10-GIU-2013' OR LEGGE_TITOLO = 'legge del 10-giu-2013')); 

UPDATE REPOSITORYADM.APPROVAZIONI
SET VOTO_DATO = 'FAV' WHERE (PARL_ID = '000001' AND (LEGGE_TITOLO = 'LEGGE DEL 10-GIU-2013' OR LEGGE_TITOLO = 'legge del 10-giu-2013')); 

UPDATE REPOSITORYADM.APPROVAZIONI
SET VOTO_DATO = 'AST' WHERE (PARL_ID = '000002' AND (LEGGE_TITOLO = 'LEGGE DEL 10-GIU-2013' OR LEGGE_TITOLO = 'legge del 10-giu-2013'));

INSERT INTO REPOSITORYADM.MODIFICHE
VALUES
('LEGGE DEL 10-GIU-2013', 'MODIFICA DELL ART. 1', '11-GIU-2013');

INSERT INTO REPOSITORYADM.ATT_PARLAMENTARI
(DATA, TIPO, TESTO, LEGGE_TITOLO, PARL_ID)
VALUES
(TO_DATE('12-GIU-2013 10:00', 'DD-MON-YYYY HH24:MI'), 'INTERV', 'UN INTERVENTO', 'LEGGE DEL 10-GIU-2013', '000000');

INSERT INTO REPOSITORYADM.ATT_PARLAMENTARI
(DATA, TIPO, OGGETTO, MINISTRO, PARL_ID)
VALUES
(TO_DATE('12-GIU-2013 13:00', 'DD-MON-YYYY HH24:MI'), 'INTERR', 'UN INTERROGAZIONE', 'G. LETTA', '000001');

INSERT INTO REPOSITORYADM.ATT_PARLAMENTARI
(DATA, TIPO, OGGETTO, MINISTRO, PARL_ID)
VALUES
(TO_DATE('12-GIU-2013 16:00', 'DD-MON-YYYY HH24:MI'), 'INTERP', 'UNA INTERPELLANZA', 'INTERO CONSIGLIO', '000002');

INSERT INTO REPOSITORYADM.MOZIONI
VALUES
(2, 1, 0, TO_DATE('12-GIU-2013 16:00', 'DD-MON-YYYY HH24:MI'), 'UNA INTERPELLANZA', '000002');

INSERT INTO REPOSITORYADM.MISSIONI
(IDENTIFICATIVO, INIZIO)
VALUES
('000000', TO_DATE('11-GIU-2013 12:00', 'DD-MON-YYYY HH24:MI'));

UPDATE REPOSITORYADM.DESTINAZIONI
SET DESTINAZIONE = 'BRASILE' WHERE MISSIONE_ID = '000000';

INSERT INTO REPOSITORYADM.PARL_MISSIONE
VALUES
('000001', '000000');

INSERT INTO REPOSITORYADM.NOTE_SPESE
VALUES
('000000', 'XVII', 2000, 1000, 500, 1000, 300, 500, 5300, '12-giu-2013');

INSERT INTO REPOSITORYADM.NOTE_SPESE
VALUES
('000000', 'XVI', 200, 100, 50, 100, 30, 50, 530, '13-giu-2013');

SELECT * FROM REPOSITORYADM.LEGISLATURE;
SELECT * FROM REPOSITORYADM.PARLAMENTARI;
SELECT * FROM REPOSITORYADM.PRESENZE;
SELECT * FROM REPOSITORYADM.LEGIS_PARL;
SELECT * FROM REPOSITORYADM.LEGGI;
SELECT * FROM REPOSITORYADM.MODIFICHE;
SELECT * FROM REPOSITORYADM.APPROVAZIONI;
SELECT * FROM REPOSITORYADM.ATT_PARLAMENTARI;
SELECT * FROM REPOSITORYADM.MOZIONI;
SELECT * FROM REPOSITORYADM.MISSIONI;
SELECT * FROM REPOSITORYADM.DESTINAZIONI;
SELECT * FROM REPOSITORYADM.PARL_MISSIONE;
SELECT * FROM REPOSITORYADM.NOTE_SPESE;

SELECT * FROM TABLE(REPOSITORYADM.NOTE_SPESE_FUNC('000000'));
trigger
codice:
create or replace 
TRIGGER REPOSITORYADM.IN_LISTA_NERA 
AFTER INSERT ON REPOSITORYADM.PRESENZE 
FOR EACH ROW 
BEGIN
  DBMS_MVIEW.REFRESH('REPOSITORYADM.LISTA_NERA_VM', 'C');
END;
vista materializzata

è una tabella con identificativo del parlamentare, nome e cognome creata con il seguente codice:

codice:
select id_parlamentare, nom, cognome
from repositoryadm.parlamentari
where repositoryadm.percentuale_presenze(id_parlamentare) < 70
procedura percentuale presenze
codice:
create or replace FUNCTION repositoryadm.PERCENTUALE_PRESENZE 
(
  ID_P IN VARCHAR2  
) RETURN NUMBER DETERMINISTIC AS 

TOT_SEDUTE NUMBER := 0;
NUM_SEDUTE NUMBER := 0;
PERCENTUALE NUMBER(5,2) := 0;

BEGIN
  SELECT COUNT(DISTINCT DATA_SEDUTA) INTO TOT_SEDUTE
  FROM REPOSITORYADM.PRESENZE, REPOSITORYADM.LEGISLATURE
  WHERE LEGIS_NUM = NUMERO_PROGRESSIVO AND DATA_FINE IS NULL;
  
  SELECT COUNT(DISTINCT DATA_SEDUTA) INTO NUM_SEDUTE
  FROM REPOSITORYADM.PRESENZE, REPOSITORYADM.LEGISLATURE
  WHERE LEGIS_NUM = NUMERO_PROGRESSIVO AND DATA_FINE IS NULL AND PARL_ID = ID_P;
  
  PERCENTUALE := NUM_SEDUTE * 100 / TOT_SEDUTE;
  
  RETURN PERCENTUALE;
END PERCENTUALE_PRESENZE;
adesso il problema che ho io è il seguente: quando eseguo lo script per il popolamento delle tabelle, mi viene visualizzato il seguente errore (appena arriva all'inserimento della tupla in presenze):

Errore con inizio alla riga 51 nel comando:
INSERT INTO REPOSITORYADM.PRESENZE
VALUES
('000000', '10-GIU-2013', 'XVII')
Report errori:
Errore SQL: ORA-04092: impossibile COMMIT in un trigger
ORA-06512: a "SYS.DBMS_SNAPSHOT", line 2760
ORA-06512: a "SYS.DBMS_SNAPSHOT", line 2740
ORA-06512: a "REPOSITORYADM.IN_LISTA_NERA", line 2
ORA-04088: errore durante esecuzione del trigger 'REPOSITORYADM.IN_LISTA_NERA'
04092. 00000 - "cannot %s in a trigger"
*Cause: A trigger attempted to commit or rollback.
*Action: Rewrite the trigger so it does not commit or rollback.

dove avrei sbagliato???

non badate al resto degli errori perchè non li sto ancora considerando.