我的包包含用户类型RECORD
和用户类型TABLE
第一种类型:
TYPE ObjData IS RECORD (
Test date NOT NULL := DATE '0001-01-01',
Val decimal
);
TYPE ObjDataCollection IS TABLE
OF ObjData;
我需要从包中调用PROCEDURE
作为参数传递一个ObjDataCollection
对象,从DBTable中获取:
SELECT LogDate, TypeVal FROM UserLogs
当我调用查询时,它会返回几十条记录,但我试过的这个函数没有返回任何内容:
CREATE FUNCTION TestData RETURN MyPackage.ObjDataCollection AS
res MyPackage.ObjDataCollection;
BEGIN
SELECT LogDate, TypeVal
BULK COLLECT INTO res
FROM UserLogs
ORDER BY LogDate;
RETURN res;
END TestData;
这是运行窗口日志:
Connecting to the database MYDB.
Process exited.
Disconnecting from the database MYDB.
这是输出变量窗口(它是空的):
答案 0 :(得分:0)
游标的%ROWCOUNT
属性告诉您到目前为止已提取的行数,而不是可以获取的行数。因此,在获取数据之前检查%ROWCOUNT
是错误的。这总是会返回0。
在这种情况下,您的IF
声明是不必要的。我也不打算定义一个游标变量,只需
CREATE FUNCTION TestData
RETURN MyPackage.ObjDataCollection
AS
res MyPackage.ObjDataCollection;
BEGIN
SELECT LogDate, TypeVal
BULK COLLECT INTO res
FROM UserLogs
ORDER BY LogDate;
RETURN res;
END;