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