Oracle - Consulta funcion PLSQL

   
Vista:

Consulta funcion PLSQL

Publicado por Cristian Alejandro Saavedra Toro (2 intervenciones) el 27/06/2012 10:09:09
Buenas a todos:
Tengo la siguiente duda y es la cual no puedo implementar en mi codigo un if ya que tal vez no se como implementarlo pero la idea dice algo asi:

Necesito crear una funcion que obtenga el nombre del departamento por cada departamento procesado. Si para el departamento procesado no existe, entonces tu funcion debe retornar el varchar2 'DEPARTAMENTO SIN NOMBRE'.

Coloco el codigo de lo que he hecho para ver si me corrigen mi implementacion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE OR REPLACE FUNCTION fn_ObtenerNombreDepartamento
(n_departamento IN varchar2 )
RETURN varchar2
AS
  nombre_departamento varchar2(30);
BEGIN
  SELECT department_name
  INTO nombre_departamento
  FROM departments
  WHERE department_name = n_departamento;
   -- IF n_departamento = null THEN
     --dbms.output.putline('DEPARTAMENTO NO EXISTE');
 -- END IF;
RETURN nombre_departamento;
END;


lo que esta en -- esta comentado ya que al momento de implementarlo me arroja un warning ya que este no devuelve ningun valor y no se me ha ocurrido otras maneras de como hacer que mi varchar2 devuelva el valor departamento no existe si este no existiera en la busqueda.

ojala pudieran ayudarme con esta duda. les estare bastante agradecidos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta funcion PLSQL

Publicado por nox_batusai (2 intervenciones) el 29/06/2012 17:58:53
Estimado, lo que pasa es que en tu if la variable que estas comparando con el null es la que te pasan por parámetro (n_departamento) y no la que estas asignando en el select (nombre_departamento).
Espero te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta funcion PLSQL

Publicado por Nacho (3 intervenciones) el 04/07/2012 22:58:52
Que tal Cristian, mmm creo que podrias solucionar tu problema, manejando una excepcion en tu bloque. Lo que hace la excepcion es debolverte un valor en caso de que tu select no regrese ningun valor.


CREATE OR REPLACE FUNCTION fn_ObtenerNombreDepartamento
(n_departamento IN varchar2 ) RETURN varchar2
AS
nombre_departamento varchar2(30);
BEGIN
SELECT department_name
INTO nombre_departamento
FROM departments
WHERE department_name = n_departamento;
-- devuelve el valor de tu select
RETURN nombre_departamento;
EXCEPTION
WHEN NO_DATA_FOUND THEN
nombre_departamento := 'DEPARTAMENTO NO EXISTE';
-- Devuelve un valor en caso de no encontrar datos
RETURN nombre_departamento;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta funcion PLSQL

Publicado por Luis luis2409@gmail.com (232 intervenciones) el 07/11/2012 20:23:17
Tu funcion debe ser asi :


CREATE OR REPLACE FUNCTION fn_ObtenerNombreDepartamento
(n_departamento IN varchar2) RETURN varchar2 AS

nombre_departamento varchar2(30);

BEGIN

SELECT department_name
INTO nombre_departamento
FROM departments
WHERE department_name = n_departamento;

RETURN nombre_departamento;

EXCEPTION
WHEN OTHERS THEN
RETURN 'DEPARTAMENTO SIN NOMBRE' ;

END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta funcion PLSQL

Publicado por Alixandro florian_do@yahoo.com (63 intervenciones) el 03/06/2013 19:43:33
Cristian, ahi tienes otra version de las que ya te han dado.

CREATE OR REPLACE FUNCTION fn_ObtenerNombreDepartamento
(n_departamento IN departments.department%Type ) RETURN departments.department_name%Type AS
nombre_departamento departments.department_name%Type := 'DEPARTAMENTO NO EXISTE';
BEGIN
SELECT department_name
INTO nombre_departamento
FROM departments
WHERE department_name = n_departamento;
---
RETURN nombre_departamento;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN nombre_departamento;
END;

Observacion: me imagino que esto WHERE department_name = n_departamento esta erroneo, ya que si conoces el nombre para que buscarlo, me parece que es algo asi: WHERE department = n_departamento;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar