Bulk Collect con Pro*c [message #285812] |
Wed, 05 December 2007 14:01 |
karfac
Messages: 1 Registered: December 2007
|
Junior Member |
|
|
Buenas
Tengo el siguiente dilema, el cual no se si se puede hacer de esta manera.
TEngo creado un type object en oracle y un type table de ese object
CREATE OR REPLACE type o_pasoc as object (
cod_fono number(14),
cod_fax number(14)
)
CREATE OR REPLACE TYPE t_pasoc AS TABLE OF O_PASOC
A continuacion la funcion donde la utilizo:
CREATE OR REPLACE procedure My_Direc(
lista out nocopy t_pasoc,
cod_retorno OUT NOCOPY NUMBER,
mens_retorno OUT NOCOPY VARCHAR2) AS
BEGIN
cod_retorno:=0;
mens_retorno:='OK';
select O_PASOC(cod_fono, cod_fax)
bulk collect into lista
from Dir_personal;
EXCEPTION
WHEN OTHERS THEN
cod_retorno := -1;
mens_retorno := 'Error';
END My_Direc;
Este procedure lo llamo desde un Pro*c y retorna aproximadamente 20000 registros (normalemnte se demora 60 sec pero con bulk collect bajamos a 8 sec.):
EXEC SQL BEGIN DECLARE SECTION;
char Mensaje_retorno[300];
int Codigo_retorno ;
int lista_proc[10000];
EXEC SQL END DECLARE SECTION;
EXEC SQL EXECUTE
DECLARE
Lista T_PASOC;
BEGIN
My_Direc( Lista, :Codigo_retorno, :Mensaje_retorno );
/*:lista_proc:=Lista;*/
END;
END-EXEC;
Mi problema esta en la linea en negrita y la pregunta es:
Como puedo traspasar la lista type object a un host array o estructura o cualquier otra variable definida en Pro*c, sea dentro o fuera del bloque SQL.
Tengo entendido que se puede utilizar OTT (Object Type Traslator) en la parte Pro*c, pero no he encontrado ningun ejemplo.
Alguien seria tan amable de orientarme al respecto o mejor algun ejemplo como solucionar ese "problema".
Gracias.
Saludos!
|
|
|
|