referencia a un cursor en un remote procedure

Scardanelli
02 de Septiembre del 2004
Tengo una funcion en un servidor remoto(conectado a una cliente mediante un dblink) que retorna un cursor como puedo recuperar el valor del cursor enla aplicacion cliente utilizando pl/sql y/o EL paquete EXEC_SQL de developer/2000
Codigo:
DECLARE
v_Conn EXEC_SQL.ConnType;
v_Cursor EXEC_SQL.CursType;
v_ret PLS_INTEGER;

v_TiposViales VARCHAR2(100);
TYPE t_RefCursor IS REF CURSOR;
v_RefCursor t_RefCursor;

BEGIN
--Abrimos la conexion y el cursor
v_Conn := EXEC_SQL.OPEN_CONNECTION('rp_query/[email protected]:1521:dw');
v_Cursor := EXEC_SQL.OPEN_CURSOR(v_Conn);

--Analizamos la consulta
EXEC_SQL.PARSE(v_Conn,v_Cursor,'{v_RefCursor := call dw.fccomsi.DameClases(:vigente)}');

--acoplamos la variable de host
EXEC_SQL.BIND_VARIABLE(v_Conn,v_Cursor,':vigente','V');
--EXEC_SQL.BIND_VARIABLE(v_Conn,v_Cursor,':v_CursorOutput',v_CursorOutput);

--Definimos las columnas para el cursor de salida
--EXEC_SQL.DEFINE_COLUMN(v_Conn,v_Cursor,1,v_TiposViales,100);

--Ejecutamos la consulta
v_ret := EXEC_SQL.EXECUTE(v_Conn,v_Cursor);

--Iteramos por el cursor extrayendo los valores a las variables buffer de salida
LOOP
IF EXEC_SQL.FETCH_ROWS(v_Conn,v_Cursor) > 0 THEN
EXEC_SQL.VARIABLE_VALUE(v_Conn,v_Cursor,v_TiposViales);
ELSE
EXIT;
END IF;
END LOOP;

--Cerramos el cursor y la conexion
EXEC_SQL.CLOSE_CURSOR(v_Conn,v_Cursor);
EXEC_SQL.CLOSE_CONNECTION(v_Conn);

EXCEPTION
WHEN EXEC_SQL.PACKAGE_ERROR THEN
TEXT_IO.PUT_LINE('ERROR('||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(v_Conn)) || '): ' || EXEC_SQL.LAST_ERROR_MESG(v_Conn));
IF EXEC_SQL.IS_CONNECTED(v_Conn) THEN
IF EXEC_SQL.IS_OPEN(v_Cursor) THEN
EXEC_SQL.CLOSE_CURSOR(v_Conn,v_Cursor);
END IF;
EXEC_SQL.CLOSE_CONNECTION(v_Conn);
END IF;

END;