J'ai une procédure stockée qui exécute une autre procédure stockée plusieurs fois. J'ai besoin d'union et de retour de données, ce que j'ai après l'exécution de la deuxième procédure.Les données de l'union des curseurs en un
Puis-je d'une certaine manière mettre les données d'union de plusieurs curseurs dans un autre curseur? C'est possible sans tables temporaires ou type de données de type table?
EDIT: Le nombre de curseurs pour l'union est réellement n (où n est 1, 2, 3, etc, détectant par une autre procédure).
Par exemple:
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;
/
résultat attendu:
---
1
1
n étant constant ou variable? –
n - variable. Ce fut un exemple seulement pour expliquer ma question, dans le compte réel db curseurs pour l'union est la détection par une autre procédure. – ksogor
Ensuite, vous pouvez construire dynamiquement la table de sélection de table (PROC_DATA (data1)) table de syndicats (PROC_DATA (data2)) (PROC_DATA (data3)) ... requête dynamiquement et l'exécuter –