k_mishima
30-01-2009, 18:17
Salve, devo definire il seguente vincolo dinamico:
Non si puo' aumentare lo stipendio di un dipendente che lavora da meno di 1 anno nell'azienda
CREATE TABLE PERSONALE(
CODICE_IMPIEGATO CHAR(5) PRIMARY KEY,
STIPENDIO FLOAT NOT NULL,
DATA_ASSUNZIONE DATE NOT NULL);
questa è la tabella (riporto solo gli attributi interessati)
qui i miei dubbi: all'inizio pensavo di fare un trigger, poi ho pensato che mi servisse il codice dell'impiegato a cui si vuole aumentare lo stipendio per ricercare la sua data di assunzione (è una stupidaggine?)
allora stavo provando con una procedura.
p.s. si puo' inserire un trigger in una procedura? (domanda da 1000000 di euro)
CREATE OR REPLACE PROCEDURE AUMENTA_SALARIO
(PARAMETRO1 CHAR, PARAMETRO2 FLOAT) IS
DAT DATE;
INVALID_SALARIO EXCEPTION;
FLAG BOOLEAN:=FALSE;
BEGIN
SELECT DATA_DI_ASSUNZIONE INTO DAT FROM PERSONALE WHERE CODICE_IMPIEGATO=PARAMENTRO1;
IF SYSDATE-DAT>= ????
FLAG:=TRUE;
ELSE
:NEW.STIPENDIO=PARAMETRO2;
END IF;
IF NOT FLAG THEN
RAISE INVALID_SALARIO;
END IF;
EXCEPTION
WHEN INVALID_SALARIO THEN
RAISE_APPLICATION_ERROR(-20007, 'impossibile inserire salario');
END;
Cosa va messo al posto di ????
Grazie 1000
Non si puo' aumentare lo stipendio di un dipendente che lavora da meno di 1 anno nell'azienda
CREATE TABLE PERSONALE(
CODICE_IMPIEGATO CHAR(5) PRIMARY KEY,
STIPENDIO FLOAT NOT NULL,
DATA_ASSUNZIONE DATE NOT NULL);
questa è la tabella (riporto solo gli attributi interessati)
qui i miei dubbi: all'inizio pensavo di fare un trigger, poi ho pensato che mi servisse il codice dell'impiegato a cui si vuole aumentare lo stipendio per ricercare la sua data di assunzione (è una stupidaggine?)
allora stavo provando con una procedura.
p.s. si puo' inserire un trigger in una procedura? (domanda da 1000000 di euro)
CREATE OR REPLACE PROCEDURE AUMENTA_SALARIO
(PARAMETRO1 CHAR, PARAMETRO2 FLOAT) IS
DAT DATE;
INVALID_SALARIO EXCEPTION;
FLAG BOOLEAN:=FALSE;
BEGIN
SELECT DATA_DI_ASSUNZIONE INTO DAT FROM PERSONALE WHERE CODICE_IMPIEGATO=PARAMENTRO1;
IF SYSDATE-DAT>= ????
FLAG:=TRUE;
ELSE
:NEW.STIPENDIO=PARAMETRO2;
END IF;
IF NOT FLAG THEN
RAISE INVALID_SALARIO;
END IF;
EXCEPTION
WHEN INVALID_SALARIO THEN
RAISE_APPLICATION_ERROR(-20007, 'impossibile inserire salario');
END;
Cosa va messo al posto di ????
Grazie 1000