Tengo un procedimiento almacenado que ejecuta otro procedimiento almacenado varias veces. Necesito una unión y devolver datos, que tengo después de ejecutar el segundo procedimiento.Datos de unión de cursores en uno
¿Puedo de alguna manera unir datos de varios cursores en un cursor uno al otro? Es posible sin tablas temporales o tipo de datos tipo tabla?
EDITAR: Cursor count for union en realidad es n (donde n es 1, 2, 3, etc., detectando por otro procedimiento).
Por ejemplo:
CREATE OR REPLACE PROCEDURE proc_data
(data_out OUT SYS_REFCURSOR
) IS
BEGIN
OPEN data_out FOR SELECT '1' NUM FROM dual;
END;
/
CREATE OR REPLACE PROCEDURE proc_result
(data_out OUT SYS_REFCURSOR
) IS
data1 SYS_REFCURSOR;
data2 SYS_REFCURSOR;
BEGIN
PROC_DATA(data1);
PROC_DATA(data2);
-- select data1 and data2 into data_out - how?
END;
/
SET SERVEROUTPUT ON
DECLARE
data_out SYS_REFCURSOR;
temp_row VARCHAR2(10);
BEGIN
PROC_RESULT(data_out);
LOOP
FETCH data_out INTO temp_row;
EXIT WHEN data_out%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(temp_row);
END LOOP;
CLOSE data_out;
END;
/
salida esperada:
---
1
1
n es constante o variable? –
n - variable. Este fue solo un ejemplo para explicar mi pregunta, en real db, el conteo de los cursores para la unión es detectado por otro procedimiento. – ksogor
Luego podría compilar la tabla de selección (PROC_DATA (data1)) tabla de unión (PROC_DATA (data2)) tabla de unión (PROC_DATA (data3)) ... consultar dinámicamente y ejecutarlo –