在输出参数中返回plqsl存储过程中的多行

时间:2017-03-21 10:28:14

标签: plsql

我必须编写一个PL / SQL存储过程来从数据库中的选定表中提取所有行 我尝试过这样的事情:

    create or replace PROCEDURE ANAGRAFICA_GET (
ID_O OUT NUMBER
NOME_O OUT VARCHAR2(25),
COGNOME_O OUT VARCHAR2(25),
DATA_NASCITA_O OUT VARCHAR2(25),
CITTA_NASCITA_O VARCHAR2(25),
GENERE_O OUT VARCHAR2(25),
OCCUPAZIONE_O OUT VARCHAR2(25)
)
AS
  CURSOR RESULTS IS
  SELECT ID,NOME,COGNOME,DATA_NASCITA,CITTA_NASCITA,GENERE,OCCUPAZIONE
  FROM TAB_ANAGRAFICA;
  ESTRAZIONE TAB_ANAGRAFICA%ROWTYPE;
  LAST_ID INT;
  FIRST_ID INT;
BEGIN
  SELECT ID
     INTO LAST_ID
     FROM TAB_ANAGRAFICA
     WHERE ROWNUM <=1
     ORDER BY ID DESC;
  SELECT ID
     INTO FIRST_ID
     FROM TAB_ANAGRAFICA
     WHERE ROWNUM <=1
     ORDER BY ID ASC;
  OPEN RESULTS;
     FOR i IN FIRST_ID .. LAST_ID LOOP
       FETCH RESULTS INTO ESTRAZIONE;
       ID_O := ESTRAZIONE.ID;
       NOME_O := ESTRAZIONE.NOME;
       COGNOME_O := ESTRAZIONE.COGNOME;
       DATA_NASCITA_O := ESTRAZIONE.DATA_NASCITA;
       CITTA_NASCITA_O := ESTRAZIONE.CITTA_NASCITA;
       GENERE_O := ESTRAZIONE.GENERE;
       OCCUPAZIONE_O := ESTRAZIONE.OCCUPAZIONE;
     END LOOP;
  CLOSE RESULTS;
END;

但是当我运行存储过程时,我只能看到输出变量的最后一行;相反,如果我尝试在循环中编写dbms_outputline命令,当我运行该过程时,我可以看到它能够获取所有数据。 我怎么解决这个问题 ?如何在输出变量部分中获得结果集而不是单个记录? 谢谢大家 马可

1 个答案:

答案 0 :(得分:0)

存储过程仅在声明中提供标记为out的参数。你实际做的是打开光标,循环遍历它,每次都分配这些参数,但只有当存储过程结束时才会传递这些参数。

您要做的只是将光标作为参数:

false