Oracle - Crear Funcion Especial

 
Vista:

Crear Funcion Especial

Publicado por Javier (4 intervenciones) el 01/12/2006 01:01:37
Hola a todos, Tengo una duda espero que me puedan ayudar

Como puedo hacer para que una funcion me retorne varios tipos de datos, es decir si dentro de la Funcion tengo un select al cual hago referencia a diversos campos de una tabla que pueden ser numericos, cadenas o fechas pueda regresar unos de ellos, es decir pondria un parametro que me indique que dato del select quiero que me reporte el select, algo asi :

creste function f_prueba
( p_param1 in varchar,
p_param2 in varchar,
p_param3 in varchar
) return --- aqui es donde necesito una variable que me acepte varios tipos de datos
as
v_codigo varchar2;
v_nombre varchar2;
v_fecha date;
v_sueldo number(12,2);
begin
select codigo, nombre, fecha_nac, sueldo
from empledado
where campo1 = p_param1 and campo2 = p_param2 ;

-- aqui es mi problema
if p_param3 = 'codigo' then
return v_codigo ;
end if;

if p_param3 = 'nombre' then
return v_nombre ;
end if;

if p_param3 = 'fecha' then
return v_fecha ;
end if;

if p_param3 = 'sueldo' then
return v_sueldo ;
end if;

exception when no_data_found then return ''
end;

algo asi quiero crear para poder utilizar como una subconsulta, en visual basic hay un dato ( Variant ) el cual me permite asignarle cualquier tipo de dato ya sea cadena, numero o fecha, quiero saber si se puede crear una funcion asi como estoy pensando o si hay algun tipo varian ....

Agradecere sus comentarios

----Saludos desde Peru
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

RE:Crear Funcion Especial

Publicado por Rodrigo (102 intervenciones) el 01/12/2006 12:41:14
TYPE r_ftp_rec IS RECORD(localpath VARCHAR2(255),
filename VARCHAR2(255),
remotepath VARCHAR2(255),
filetype VARCHAR2(20),
transfer_mode VARCHAR2(5),
status VARCHAR2(40),
error_message VARCHAR2(255),
bytes_transmitted NUMBER,
trans_start DATE,
trans_end DATE);



TYPE t_ftp_rec IS TABLE of r_ftp_rec INDEX BY BINARY_INTEGER;
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

RE:Crear Funcion Especial

Publicado por Jose (16 intervenciones) el 01/12/2006 20:15:22
Bueno te planteo una solucion alternativa.

Puedes usar un procedimiento que te retorne estos valores.

Create or replace procedure f_prueba (p_param1 in varchar2(10),
p_param2 in varchar2(10),
p_param3 in varchar2(10) ,
p_codigo out varchar2(10),
p_nombre out varchar2(10),
p_fecha out date,
p_sueldo out number) is
v_codigo varchar2;
v_nombre varchar2;
v_fecha date;
v_sueldo number(12,2);
begin
select codigo, nombre, fecha_nac, sueldo
into v_codigo,v_nombre,v_fecha,v_sueldo
from empleado
where campo1 = p_param1 and campo2 = p_param2 ;

-- Valida la existencia o no de los valores retornados en el query

-- Luego le asignas los valores retornados a los parametros de salida

p_codigo := v_codigo;
p_nombre := v_nombre;
p_fecha := v_fecha;
p_sueldo := v_sueldo;

end;

El proposito es que al ponerle out a los parametros es que retorne un valor a lo que termina un procedimiento y cuando lo invoques te retornara los valores que tu quieres.

Espero que te sirva.

José Luis
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

RE:Crear Funcion Especial

Publicado por Alejandro César (189 intervenciones) el 02/12/2006 00:46:26
Según lo que planteas entiendo que tu intención no es recuperar los cuatro valores al mismo tiempo sino uno por vez, los cuatro tipos de dato de los posibles valores de retorno de la función son perfectamente convertibles a VARCHAR2 y viceversa. Tanto el codigo (que podría ser NUMBER O VARCHAR2), el nombre (que debe ser VARCHAR2), el sueldo (que debería ser NUMBER(n,n) y la fecha (DATE) pueden guardarse sin problema en una variable tipo VARCHAR2.

Para mí, la función debería ser VARCHAR2, con la salvedad de que cuando la usés declarés la variable que recibirá los datos del tipo correcto según lo que le indiqués que te devuelva. Es decir, si la llamás desde un lugar donde necesitás el nombre pues declará la variable receptora tipo VARCHAR2, si es el sueldo entonces declarala NUMBER(n,n) (cuando la función regrese el sueldo en caracter, PL/SQL lo convertirá automáticamente al tipo de dato de la variable que lo recibe).

Si tu interés es recuperar los cuatro valores al mismo tiempo, entonces usá un procedimiento con parámetros out como te indica José.

Salu2.
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