Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: jose_ank en 24 Febrero 2018, 19:37 pm



Título: Duda con lenguaje PLSQL en procedimientos/funciones
Publicado por: jose_ank en 24 Febrero 2018, 19:37 pm
Hola buenas, tengo una duda con respecto a este lenguaje de programación. Para ello os dejo este ejemplo de un ejercicio básico.

Modificar los datos de un departamento, se recoge como parámetros el identificador, el jefe y la localidad. Habrá mensaje de realización correcta. Si no  existe el departamento, se mandará mensaje.

Código:
CREATE OR REPLACE FUNCTION EJER1 
(IDENTIFICADOR IN NUMBER, JEFE IN NUMBER,LOCALIDAD IN NUMBER) RETURN VARCHAR2 AS
id_departamento departments.department_id%type;
BEGIN

  Select department_id into id_departamento
    From departments
      Where department_id = identificador;
     
  Update departments
    Set department_id=identificador,manager_id=jefe,location_id=localidad
      Where department_id = identificador;

  RETURN 'Realización correcta';
 
  exception
    When no_data_found then
      Return 'No existe el departamento';
END EJER1;

La solución es correcta, pero dado a que hemos tenído pocas clases de programación hay cosas que no entiendo. Por lo cual mi pregunta es:

¿Qué significa SELECT x INTO y ? Me refiero a que no entiendo por qué tenemos que hacer un select antes de hacer cualquier otra acción, ya bien sea update, delete, insert etc..

Un saludo!






Título: Re: Duda con lenguaje PLSQL en procedimientos/funciones
Publicado por: Carloswaldo en 14 Marzo 2018, 01:49 am
Un SELECT INTO sirve para guardar lo que retorne el SELECT en una variable para su uso posterior, en este caso en "id_departamento".

Me parece que para este ejercicio se hace primero un SELECT INTO para el manejo de la excepción "no_data_found". Si haces el UPDATE directo y resulta que no existe el id del departamento, el UPDATE no tiene por qué fallar, más bien concluye con éxito pero no actualiza ningún registro. Sin embargo un SELECT INTO lanzará un error cuando no haya resultados, así puedes asegurarte de mandar el mensaje correcto.