尝试在求和表达式中使用包函数时无效的标识符

时间:2015-10-22 16:04:24

标签: sql oracle plsql

我正在尝试将sum函数与包函数一起使用但遇到“无效标识符”错误。这是一些带有错误导致功能评论的示例代码

create or replace type numType as object
(
  myNum number
)
;
/ 
create or replace type numTypes is table of numType;
/
create or replace package testNumberPackage as
  function ReturnNum(in_numType numType) return number;
end;
/
create or replace package body testNumberPackage as
  function ReturnNum(in_numType numType) return number is
  begin
    return in_numType.myNum;
  end;
end;
/
declare l_numTypes numTypes; 
  l_count number; 
begin 
  l_numTypes := numTypes();
  for i in 1 .. 100 loop 
    l_numTypes.extend(1); 
    l_numTypes(l_numTypes.last) := numType(i); 
  end loop;

  select sum(n.myNum) into l_count from table(l_numTypes) n;
  select sum(testNumberPackage.ReturnNum(n)) into l_count from table(l_numTypes) n; --causes the error

  dbms_output.put_line(l_count); 
end;
/

此代码的确切错误是

ORA-06550: line 11, column 42
PL/SQL: ORA-00904: "N": invalid identifier
ORA-6550:  line 11, column 3:
PL/SQL: SQL Statement ignored

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

第一个问题是,您无法通过使用别名将表传递给参数。尝试这样做是没有意义的。

下一个问题是如何将从":Print"返回的列mynum转换为正确的格式以传递到table(l_numTypes),因为它是NUMBER数据类型,并且该函数需要一个numtype参数。

为此,您需要传入一个包含该列的对象,如下所示:testNumberPackage.ReturnNum

以下适用于我:

numtype(n.mynum)

清除泥土?