我必须编写一个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命令,当我运行该过程时,我可以看到它能够获取所有数据。 我怎么解决这个问题 ?如何在输出变量部分中获得结果集而不是单个记录? 谢谢大家 马可
答案 0 :(得分:0)
存储过程仅在声明中提供标记为out的参数。你实际做的是打开光标,循环遍历它,每次都分配这些参数,但只有当存储过程结束时才会传递这些参数。
您要做的只是将光标作为参数:
false