gabriele81
14-11-2003, 14:09
Sto sviluppando per un esame un'applicazione che gestisce un'agenzia di viaggi, questa si interfaccia con una base dati creata con Oracle 9i Lite, abbiamo creato dei trigger ma non riusciamo a farli funzionare.
Ad esempio ho questa tabella (già popolata):
CREATE TABLE POSTO_PRENOTATO (
PERSONA VARCHAR (200),
CLIENTE VARCHAR (200) not null,
PROGRAMMA VARCHAR (200),
DATAP DATE,
DATAPRENO DATE not null,
primary key (PERSONA, DATAP, PROGRAMMA )
)
e ho creato questa stored procedure che serve a diminuire il numero di posti prenotati in un viaggio in caso venga cancellata una prenotazione:
public class TriggerPosto {
public void cambiaDisponibilita( Connection conn,
java.sql.Date datap, String programma ) throws SQLException {
conn.setAutoCommit(false);
conn.setTransactionIsolation(conn.TRANSACTION_SERIALIZABLE);
Statement stmt = conn.createStatement();
stmt.executeUpdate( "UPDATE VIAGGIO SET NRPRENO = NRPRENO - 1" +
" WHERE DATAP = " + datap +
" AND PROGRAMMA = '" + programma + "'");
conn.commit();
conn.setAutoCommit(true);
conn.setTransactionIsolation(conn.TRANSACTION_READ_COMMITTED);
stmt.close();
}
}
Ho attaccato la classe compilata alla tabella in questo modo:
ALTER TABLE POSTO_PRENOTATO ATTACH JAVA CLASS "TriggerPosto"
IN 'percorso_della_classe_nel_file_system';
e fin qui tutto ok, però poi quando vado a creare il trigger così
CREATE TRIGGER CAMBIA_DISP AFTER DELETE ON POSTO_PRENOTATO
POSTO_PRENOTATO."cambiaDisponibilita"(old.datap, old.programma);
mi viene fuori un errore sql che dice "nessun attributo o metodo di questo tipo". :confused:
Purtroppo questo problema ce l'abbiamo con quasi tutti i trigger del progetto...
Qualcuno che mi possa dare una mano?
Ad esempio ho questa tabella (già popolata):
CREATE TABLE POSTO_PRENOTATO (
PERSONA VARCHAR (200),
CLIENTE VARCHAR (200) not null,
PROGRAMMA VARCHAR (200),
DATAP DATE,
DATAPRENO DATE not null,
primary key (PERSONA, DATAP, PROGRAMMA )
)
e ho creato questa stored procedure che serve a diminuire il numero di posti prenotati in un viaggio in caso venga cancellata una prenotazione:
public class TriggerPosto {
public void cambiaDisponibilita( Connection conn,
java.sql.Date datap, String programma ) throws SQLException {
conn.setAutoCommit(false);
conn.setTransactionIsolation(conn.TRANSACTION_SERIALIZABLE);
Statement stmt = conn.createStatement();
stmt.executeUpdate( "UPDATE VIAGGIO SET NRPRENO = NRPRENO - 1" +
" WHERE DATAP = " + datap +
" AND PROGRAMMA = '" + programma + "'");
conn.commit();
conn.setAutoCommit(true);
conn.setTransactionIsolation(conn.TRANSACTION_READ_COMMITTED);
stmt.close();
}
}
Ho attaccato la classe compilata alla tabella in questo modo:
ALTER TABLE POSTO_PRENOTATO ATTACH JAVA CLASS "TriggerPosto"
IN 'percorso_della_classe_nel_file_system';
e fin qui tutto ok, però poi quando vado a creare il trigger così
CREATE TRIGGER CAMBIA_DISP AFTER DELETE ON POSTO_PRENOTATO
POSTO_PRENOTATO."cambiaDisponibilita"(old.datap, old.programma);
mi viene fuori un errore sql che dice "nessun attributo o metodo di questo tipo". :confused:
Purtroppo questo problema ce l'abbiamo con quasi tutti i trigger del progetto...
Qualcuno che mi possa dare una mano?