我正在尝试将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
感谢您的帮助。
答案 0 :(得分:1)
第一个问题是,您无法通过使用别名将表传递给参数。尝试这样做是没有意义的。
下一个问题是如何将从":Print"
返回的列mynum
转换为正确的格式以传递到table(l_numTypes)
,因为它是NUMBER数据类型,并且该函数需要一个numtype参数。
为此,您需要传入一个包含该列的对象,如下所示:testNumberPackage.ReturnNum
。
以下适用于我:
numtype(n.mynum)
清除泥土?