Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2015, 05:43
Avatar de blueMuffin010
blueMuffin010
 
Fecha de Ingreso: mayo-2015
Ubicación: Sevilla
Mensajes: 19
Antigüedad: 9 años
Puntos: 0
Pregunta Problema con un Procedure

Buenas a todo el mundo. Estoy haciendo un trabajillo y me encuentro con el siguiente problema:

tengo estas dos tablas:
Código SQL:
Ver original
  1. DROP TABLE TRABAJADOR CASCADE CONSTRAINTS;
  2. DROP TABLE CONTRATO CASCADE CONSTRAINTS;
  3.  
  4. CREATE TABLE CONTRATO
  5.                       (
  6.                       FECHA_CONTRATACION DATE,
  7.                       SALARIO NUMERIC,
  8.                       PUESTO CHAR(20), CHECK (PUESTO IN ( 'Encargado','Dependiente')),
  9.                       COD_CONT VARCHAR(20),
  10.                       PRIMARY KEY(COD_CONT)
  11.                       );
  12.                      
  13.                      
  14. CREATE TABLE TRABAJADOR
  15.                       (
  16.                       NOMBRE VARCHAR(50),
  17.                       APELLIDOS VARCHAR(50),
  18.                       DNI VARCHAR(10),
  19.                       CATEGORIA CHAR(20), CHECK (CATEGORIA IN ('Encargado','Dependiente')),
  20.                       HORAS_EXT INTEGER,
  21.                       NUM_SEG_SOCIAL CHAR(11),
  22.                       SEXO CHAR(20), CHECK(SEXO IN('Hombre','Mujer')),
  23.                       TELEFONO CHAR(9),
  24.                       EMAIL VARCHAR(50),
  25.                       DIRECCION VARCHAR(100),
  26.                       COD_TRA VARCHAR(20),
  27.                       COD_CONT VARCHAR(20),
  28.                       PRIMARY KEY(COD_TRA),
  29.                       FOREIGN KEY (COD_CONT)REFERENCES CONTRATO(COD_CONT)
  30.                       );


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
  1. CREATE OR REPLACE PROCEDURE ascender_trabajador(cod_trab IN VARCHAR)
  2.  IS RES VARCHAR(20);
  3. fecha1 DATE;
  4. cod_conte VARCHAR(20);
  5. pues CHAR(20);
  6. BEGIN
  7.   SELECT COD_CONT INTO cod_conte FROM TRABAJADOR WHERE cod_trab=TRABAJADOR.COD_TRA;
  8.   SELECT FECHA_CONTRATACION INTO fecha1 FROM CONTRATO WHERE cod_conte=CONTRATO.COD_CONT;
  9.   SELECT PUESTO INTO pues FROM CONTRATO WHERE cod_conte=CONTRATO.COD_CONT;
  10.   IF(pues = 'Dependiente')
  11.   THEN
  12. IF (fecha1 - SYSDATE < 0)
  13. THEN
  14.   UPDATE CONTRATO SET SALARIO = 1500 WHERE cod_conte=CONTRATO.COD_CONT;
  15.   UPDATE CONTRATO SET PUESTO = 'Dependiente' WHERE cod_conte=CONTRATO.COD_CONT;
  16.   res:='Trabajador ascendido correctamente';
  17.   ELSE res:='El trabajador no puede ascender porque no ha cumplido el año de trabajo requerido para ello1';
  18.   END IF;
  19.   ELSE res:='El trabajador no puede ascender porque ya está en el máximo puesto';
  20.   END IF;
  21.   dbms_output.put_line(RES);
  22.   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?