PL / SQL:无法将表%ROWTYPE转换为用户定义的TYPE TABLE。但没有给出错误

时间:2015-07-03 13:07:03

标签: oracle plsql casting cursor user-defined-types

我的包含用户类型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.

这是输出变量窗口(它是空的): Screenshot

1 个答案:

答案 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;