Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: inquilin@19 en 1 Febrero 2012, 18:56 pm



Título: GESTIONAR EXCEPCIONES EN ORACLE
Publicado por: inquilin@19 en 1 Febrero 2012, 18:56 pm
Hola a todos, vereis estoy haciendo unos ejercicios de Oracle sobre el tratamiento de excepciones, el código que tengo es el siguiente:
Código:
SQL> DECLARE
  2  numero EMPLE.EMP_NO%TYPE;
     apellido EMPLE.APELLIDO%TYPE;
     puesto EMPLE.OFICIO%TYPE;
     jefe EMPLE.DIR%TYPE;
     fecha EMPLE.FECHA_ALT%TYPE;
     salario EMPLE.SALARIO%TYPE;
     comision EMPLE.COMISION%TYPE;
     dep EMPLE.DEPT_NO%TYPE;
duplicado_no_emp EXCEPTION;
  5  BEGIN
  6  SELECT MAX(EMP_NO) INTO num_emple FROM EMPLE;
  7  SELECT SYSDATE INTO fecha FROM DUAL;
     apellido := 'VAZQUEZ';
     puesto := 'VENDEDOR';
     jefe := '7698';
     salario := '1200';
     comision := '200';
  8  dep := 20;
  9  num_emple := num_emple +1;     
 10  INSERT INTO EMPLE
     VALUES (numero, apellido, puesto,jefe,fecha,salario,comision,dep);
IF numero IN SELECT EMP_NO FROM EMPLE;
RAISE duplicado_no_emp;
END IF;
IF jefe = NULL
RAISE no_dir;
END IF;
EXCEPTION
 WHEN duplicado_no_em THEN
dbms_output.put_line('Número de empleado no puede estar duplicado');
WHEN no_dir THEN
dbms_output.put_line('¡Todo empleado tiene que tener jefe!');
END;
  /
No sé en que me falla pero no se ejecuta correctamente.
Otra duda que tengo, se supone que tengo que sacar de una tabla los dos empleados que mas cobran por oficio, he conseguido esto:
Código:
SQL> SELECT MIN(SALARIO), DEPT_NO FROM EMPLE GROUP BY DEPT_NO;
Pero no consigo sacar los dos que más cobran
Alguien me podría ayudar?
En cuanto resuelva el resto les subo por si a alguien le sirven
Un saludo y gracias de antemano
:D


Título: Re: GESTIONAR EXCEPCIONES EN ORACLE
Publicado por: fran800m en 6 Febrero 2012, 19:23 pm
Hace mucho que no toco PL, ¿pero no_dir no debería estar declarado?
y en el declare

 DECLARE
 numero EMPLE.EMP_NO%TYPE;
     apellido EMPLE.APELLIDO%TYPE;
     puesto EMPLE.OFICIO%TYPE;

¿no deberias separar con , en vez de ; ?

Si necesitas el máximo, ¿por qué usas min() ?

¿Qué mensaje de error et da?