我已经创建了如下proc从一个表中读取所有数据并以.net形式将其填充到网格中。oracle批量收集和读取数据
CREATE OR REPLACE PROCEDURE EVMPDADM.GETALLBATCHES_ARTICLE_57(p_batchstatus OUT XEVMPD_SUBMITTEDBATCH%ROWTYPE)
IS
TYPE batch_status IS TABLE OF XEVMPD_SUBMITTEDBATCH%ROWTYPE INDEX BY PLS_INTEGER;
l_batchstatus batch_status;
BEGIN
SELECT * BULK COLLECT INTO l_batchstatus FROM XEVMPD_SUBMITTEDBATCH ;
FOR i IN 1..l_batchstatus.count LOOP
p_batchstatus:= l_batchstatus(i);
END LOOP;
END GETALLBATCHES_ARTICLE_57;
要测试PROC运行正常我尝试用下面的PL-SQL块打印数据:
DECLARE
v_batchstatus XEVMPD_SUBMITTEDBATCH%ROWTYPE;
BEGIN
EVMPDADM.GETALLBATCHES_ARTICLE_57(v_batchstatus);
DBMS_OUTPUT.PUT_LINE(v_batchstatus.Batch_id || ' ' || v_batchstatus.BATCH_DESCRIPTION || ' ' || v_batchstatus.STATUS || ' ' ||v_batchstatus.RECORD_STATUS || ' ' ||v_batchstatus.NUMBER_OF_RECORDS);
END;
/
但是从这个过程中,我只得到了最后一排。 我想打印表中的所有记录。 任何人都可以帮助我找出上述代码中的错误。
首先,您的程序将只返回您提取的任意最后一行的数据。您似乎不太可能想要生成结果集并获取数据仅用于丢弃除一行之外的所有数据,并且您不关心保留哪一行。其次,你不能将'%rowtype'变量传递给'dbms_output.put_line'。您可以传递特定的标量属性,即'dbms_output.put_line(v_batchstatus.col1 ||''|| v_batchstatus.col2 || ...);'但您必须枚举您想要查看的属性。 –