Buenas a todo el mundo. Estoy haciendo un trabajillo y me encuentro con el siguiente problema:
tengo estas dos tablas:
Código SQL:
Ver originalDROP 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 originalCREATE 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?