我已經創建瞭如下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 || ...);'但您必須枚舉您想要查看的屬性。 –