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

Plsql 在输出参数中的plqsl存储过程中返回多行,plsql,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)

我必须编写一个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;
创建或替换程序ANAGRAFICA\u GET(
身份证号码
NOME_O OUT VARCHAR2(25),
VARCHAR2的COGNOME_O OUT(25),
VARCHAR2(25)的数据,
西塔·纳西塔·瓦查尔2(25),
VARCHAR2(25)号发电机,
瓦查尔职业2(25)
)
作为
光标结果为
选择ID、NOME、COGNOME、DATA_NASCITA、CITTA_NASCITA、GENERE、Occupzione
来自TAB_ANAGRAFICA;
ESTRAZIONE TAB_ANAGRAFICA%行类型;
最后一个ID INT;
第一个ID INT;
开始
选择ID
进入最后一个身份证
来自TAB_ANAGRAFICA

其中ROWNUM存储过程只给出声明中标记为out的参数。实际上,您所做的是打开光标,在光标中循环,每次都为这些参数赋值,但只有当存储过程结束时,这些参数才会被传递出去

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

create or replace PROCEDURE ANAGRAFICA_GET (
    PASSED_CURSOR OUT SYS_REFCURSOR,
) AS
BEGIN
        OPEN PASSED_CURSOR FOR
            SELECT X, Y, Z FROM EXAMPLE_TABLE;
END

如果我想将所有的值返回到一个游标中,这很好用。。。但是我需要单独使用整个名称列表,整个cogmome列表等等,即Root-NOME(list)-COGNOME(list)。。。。因为我需要在外部环境中使用所有这些列表,我认为这是因为我在循环之外输出变量,我不明白你的意思。这样,您就可以将光标传递到外部环境。然后外部环境可以循环并访问每个记录以及您需要的所有值。输出只在存储过程的末尾传递。不是在每次迭代中。没有任何外部环境会得到比您定义的参数更多的参数。谢谢,我解决了我的问题。我在外部环境中处理XML结果字符串,以获得所有需要的记录。伟大的