PL/SQL:无法将 table%ROWTYPE 转换为用户定义的类型 TABLE。但没有报错
PL/SQL: Cannot cast table%ROWTYPE to user-defined TYPE TABLE. But no error given
我有一个 Package 具有 用户类型 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
当我调用查询时,它 returns 几十条记录,但我试过的这个函数没有返回任何内容:
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;
这是运行 window日志:
Connecting to the database MYDB.
Process exited.
Disconnecting from the database MYDB.
这是输出变量 window(它是空的):
游标的 %ROWCOUNT
属性告诉您到目前为止已经获取了多少行,而不是可以获取多少行。所以在获取数据之前检查 %ROWCOUNT
是一个错误。那总是 return 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;
我有一个 Package 具有 用户类型 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
当我调用查询时,它 returns 几十条记录,但我试过的这个函数没有返回任何内容:
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;
这是运行 window日志:
Connecting to the database MYDB.
Process exited.
Disconnecting from the database MYDB.
这是输出变量 window(它是空的):
游标的 %ROWCOUNT
属性告诉您到目前为止已经获取了多少行,而不是可以获取多少行。所以在获取数据之前检查 %ROWCOUNT
是一个错误。那总是 return 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;