0
PROCEDURE test_max_rows (
test_out OUT NOCOPY test_col_t,
test_in IN test_t,
max_rows IN NUMBER DEFAULT 1000;
)
IS
CURSOR cur_test (max_rows IN number) IS
SELECT id FROM test_table
WHERE test_in.key_id = 'ABC'
AND test_in.curr_nm IS NOT NULL
AND max_rows < 1 OR ROWNUM <= max_rows;
BEGIN
OPEN cur_test(NVL(max_rows, 1000)) ;
FETCH cur_test BULK COLLECT INTO test_out;
CLOSE cur_test ;
END test_max_rows;
/
test_t
是對象類型,定義如下的存儲過程:測試其使用集合類型
test_t
:
DATE_FROM TIMESTAMP
DATE_TO TIMESTAMP
CD col_t
CURR_NM col_t
VAL VARCHAR2(40)
KEY_ID NUMBER
col_t
是集合類型,定義如下:
CREATE OR REPLACE TYPE COL_T IS TABLE OF VARCHAR2(200);
我沒工作過無線並希望通過創建一個PL/SQL匿名塊來驗證此proc,以驗證在爲max_rows傳遞不同值時它會輸出正確的行數。
MAX_ROWS:500個返回的行:500個
MAX_ROWS:10000個返回的行:10000個
MAX_ROWS:-1返回的行:全部取出由選擇查詢光標。
我不知道如何在匿名塊中傳遞對象和集合類型的值。感謝您提前提供任何幫助。
Thanks @Alex。我已經編輯了一下這個問題。你可以請進一步幫助。 – 2014-09-25 07:09:10
@WamglindCarmasaic - 你發佈的內容存在一些問題,但我已經修復了我的區塊以傳遞一個對象,並進行了一些小的調整來解決這些問題。 – 2014-09-25 07:32:04
@WamglindCarmasaic - 我懷疑你的意思是你的編輯改爲'WHERE user_id = test_in.key_id',所以這些類型需要保持一致。測試'curr_nm'是否爲空看起來有點奇怪,因爲它與表中的行沒有關係。 – 2014-09-25 07:47:37