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;