【发布时间】:2018-07-11 11:07:13
【问题描述】:
我有一个函数 MY_FUNC,它将 PL/SQL 集合作为参数。
但是,当我尝试编译具有在 INSERT 语句中调用 MY_FUNC 的过程 (MY_PROCEDURE) 的包时出现错误。这是过程和对函数的调用
MY_PROCEDURE (var1 IN OUT VARCHAR2, in_table_list IN OUT bf_types.table_of_addresses_type)
IS
BEGIN
INSERT INTO my_tab
SELECT col_A,
col_B,
MY_FUNC(var1, in_table_list)
FROM json_table (json_str etc etc)
END my_procedure;
/
我收到以下错误:
541/3 PL/SQL:忽略 SQL 语句 561/3 PL/SQL:ORA-00904:“MY_FUNC”:无效 标识符
561/3 PLS-00306:调用中的参数数量或类型错误 'MY_FUNC'
561/42 PLS-00382:表达式类型错误
这是 MY_FUNC 的代码,编译良好:
CREATE OR REPLACE FUNCTION my_func (in_marketid IN VARCHAR2, in_list_of_addresses IN bf_types.table_of_addresses_type) RETURN DATE
IS
cnt INTEGER;
BEGIN
cnt := TO_NUMBER(SUBSTR(in_marketid,1,1));
RETURN(in_list_of_addresses(cnt).move_in_date);
END my_func;`
为了测试,我更改了 MY_FUNC 以删除 PL/SQL 集合参数并修改了我的调用。
即创建或替换函数 my_func (in_marketid IN VARCHAR2) 返回日期
代码编译,因此如果函数将 PL/SQL 表(集合)作为参数,则在 INSERT 语句中调用函数似乎存在问题。另外,请注意 MY_FUNC 已在包外声明。
如果有人能提供帮助,我将不胜感激。
【问题讨论】:
-
你可以在调用部分尝试使用 schema name.function_name
-
如果架构名称是 schema1 那么 schema1.MyFunc
-
或从插入语句中删除函数调用,并尝试在过程中正常调用该函数..并检查它是否正常工作。
标签: function plsql collections