Salve ho tale database in SQL:
Ho realizzato i seguenti trigger:
Sapete dirmi se vanno bene e quale altro trigger potrei creare?
grazie mille :)
SQL:
--Definizione tabella indirizzi
CREATE TABLE indirizzo(
nomeVia VARCHAR(32),
numeroCivico VARCHAR(5),
CAP CHAR(5),
citta VARCHAR(64),
provincia CHAR(2),
codiceIndirizzo SERIAL PRIMARY KEY
);
--Definizione tabella utente
CREATE TABLE utente(
nome VARCHAR(32),
cognome VARCHAR(32),
email VARCHAR(64) PRIMARY KEY,
password VARCHAR(32),
numeroTelefono CHAR(10),
codiceIndirizzo SERIAL NOT NULL,
CONSTRAINT fk_indirizzo
FOREIGN KEY (codiceIndirizzo) REFERENCES indirizzo(codiceIndirizzo)
ON UPDATE CASCADE
ON DELETE RESTRICT
);
SQL:
--Lo stesso indirizzo email non può essere utilizzato da più utenti (rivedere)
CREATE TRIGGER controlloEmail
BEFORE INSERT OR UPDATE ON utente
FOR EACH ROW
EXECUTE PROCEDURE get_controlloEmail();
CREATE OR REPLACE FUNCTION get_controlloEmail()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
DECLARE
TEMP INTEGER :=0;
BEGIN
IF INSERTING THEN
SELECT COUNT (*) INTO TEMP
FROM utente U
WHERE (U.eMail =:NEW.eMail);
IF(TEMP <> 0) THEN
RAISE_APPLICATION_ERROR (-20001,'Indirizzo eMail gia presente!');
ELSE
SELECT NVL(MAX(email) ,0)+1 INTO pk FROM utente;
INSERT INTO utente (nome, cognome, email, password, numerotelefono, codiceIndirizzo)
VALUES (pk, :NEW.nome, :NEW.cognome, :NEW.email, :NEW.password, :NEW.numerotelefono, :NEW.codiceIndirizzo);
END IF
END
$$
--modifica password
CREATE TRIGGER get_fake_update_password
AFTER UPDATE ON utente
FOR EACH ROW
EXECUTE PROCEDURE get_update_password();
CREATE OR REPLACE FUNCTION get_update_password()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
DECLARE
BEGIN
IF(new.password != old.password) THEN
UPDATE utente SET password = pass() WHERE email = new.email;
END IF;
RETURN NEW;
END;
$$
grazie mille :)
Ultima modifica: