tengo estas dos tablas:
Código SQL:
Ver original
DROP TABLE TRABAJADOR CASCADE CONSTRAINTS; DROP TABLE CONTRATO CASCADE CONSTRAINTS; CREATE TABLE CONTRATO ( FECHA_CONTRATACION DATE, SALARIO NUMERIC, PUESTO CHAR(20), CHECK (PUESTO IN ( 'Encargado','Dependiente')), COD_CONT VARCHAR(20), PRIMARY KEY(COD_CONT) ); CREATE TABLE TRABAJADOR ( NOMBRE VARCHAR(50), APELLIDOS VARCHAR(50), DNI VARCHAR(10), CATEGORIA CHAR(20), CHECK (CATEGORIA IN ('Encargado','Dependiente')), HORAS_EXT INTEGER, NUM_SEG_SOCIAL CHAR(11), SEXO CHAR(20), CHECK(SEXO IN('Hombre','Mujer')), TELEFONO CHAR(9), EMAIL VARCHAR(50), DIRECCION VARCHAR(100), COD_TRA VARCHAR(20), COD_CONT VARCHAR(20), PRIMARY KEY(COD_TRA), FOREIGN KEY (COD_CONT)REFERENCES CONTRATO(COD_CONT) );
Y quiero que cuando un trabajador ascienda se cambie su PUESTO y su SALARIO, para lo que he hecho el siguiente PROCEDURE:
Código SQL:
Ver original
CREATE OR REPLACE PROCEDURE ascender_trabajador(cod_trab IN VARCHAR) IS RES VARCHAR(20); fecha1 DATE; cod_conte VARCHAR(20); pues CHAR(20); BEGIN SELECT COD_CONT INTO cod_conte FROM TRABAJADOR WHERE cod_trab=TRABAJADOR.COD_TRA; SELECT FECHA_CONTRATACION INTO fecha1 FROM CONTRATO WHERE cod_conte=CONTRATO.COD_CONT; SELECT PUESTO INTO pues FROM CONTRATO WHERE cod_conte=CONTRATO.COD_CONT; IF(pues = 'Dependiente') THEN IF (fecha1 - SYSDATE < 0) THEN UPDATE CONTRATO SET SALARIO = 1500 WHERE cod_conte=CONTRATO.COD_CONT; UPDATE CONTRATO SET PUESTO = 'Dependiente' WHERE cod_conte=CONTRATO.COD_CONT; res:='Trabajador ascendido correctamente'; ELSE res:='El trabajador no puede ascender porque no ha cumplido el año de trabajo requerido para ello1'; END IF; ELSE res:='El trabajador no puede ascender porque ya está en el máximo puesto'; END IF; dbms_output.put_line(RES); END PROCEDURE;
El caso es que me da un error que dice : "Error(22,7): PLS-00103: Encountered the symbol "PROCEDURE" when expecting one of the following: ; <an identifier> <a double-quoted delimited-identifier> current delete exists prior <a single-quoted SQL string> The symbol "PROCEDURE" was ignored. "
Estoy un poco verde en este tema, no sé qué es lo que puede estar fallando. Si alguien me echara una mano se lo agradecería. Gracias.
PD:No sabía como hacer la excepcion de que si un trabajador no lleva el año trabajado no puede ascender. Me la he inventado un poco con lo de SYSDATE ¿Está bien?