重新访问 ORA-06576:不是通过各种数据库工具进行简单函数调用的有效函数或过程名称
Revisting ORA-06576: not a valid function or procedure name for simple function call via various database tools
重新访问 ORA-06576:不是通过 dbeaver 数据库工具调用简单函数的有效函数或过程名称
我看过很多帖子,但它们没有涵盖我遇到的情况。
我正在尝试通过 dbeaver 对 Oracle SQL 进行简单的函数调用:
根据通过dbeaver得到的右键调用函数函数语法为:
CALL OUR_DB.GET_YEAR_FROM_DATE(:INPUT_DATE);
更具体地说:
CALL OUR_DB.GET_YEAR_FROM_DATE('01/02/2024');
但是,我收到以下错误:
ORA-06576: 不是有效的函数或过程名称
函数 似乎编译正确。
我也试过做自己的函数(可能有语法错误),所以这可能是一个后续问题。
但是,上述函数已经存在于我们的数据库中,应该可以正常工作。
假设这是真的,如何从 dbeaver 中调用它?
我正在使用:
dbeaver 21.3
还有来自 SELECT * FROM v$version 的 ORACLE 是:
Oracle Database 19c 标准版 2 发行版 19.0.0.0.0 - 生产
为了它的价值,我使用了 Oracle SQL Developer Version 4.1.4.21
有一个非常相似的错误,可能是更详细的错误信息:
CALL OUR_DB.GET_YEAR_FROM_DATE('01/02/2024');
Error report -
SQL Error: ORA-06576: not a valid function or procedure name
06576. 00000 - "not a valid function or procedure name"
*Cause: Could not find a function (if an INTO clause was present) or
a procedure (if the statement did not have an INTO clause) to
call.
*Action: Change the statement to invoke a function or procedure
这似乎表明问题并不是真正的工具问题,而是底层数据库问题。
如果认为语法有效,是否只是权限问题?
函数和过程有很大的不同。
两者都得到参数,但只有函数 returns
一个值。
所以基本上 函数 可以在 select
语句或赋值语句的 PL/SQL 块中调用。请参阅下面的示例。
只有过程可以简单调用。
关于函数和过程及其区别的一些基本信息:
what-is-the-difference-between-function-and-procedure-in-pl-sql
functions-vs-procedures-in-oracle
例子
create function hello(par varchar2) return varchar2 as
begin
return ('world ' || par);
end;
/
-- wrong usage of function
CALL hello('hello')
SQL Error [6576] [65000]: ORA-06576: not a valid function or procedure name
-- legal use of function in SELECT
select hello('hello') from dual;
world hello
-- or in PL/SQL block
-- use Ctrl+Shift+O for SET serveroutput ON;
DECLARE
v_result varchar(100);
BEGIN
v_result := hello('helo');
dbms_output.put_line(v_result);
END;
重新访问 ORA-06576:不是通过 dbeaver 数据库工具调用简单函数的有效函数或过程名称
我看过很多帖子,但它们没有涵盖我遇到的情况。
我正在尝试通过 dbeaver 对 Oracle SQL 进行简单的函数调用:
根据通过dbeaver得到的右键调用函数函数语法为:
CALL OUR_DB.GET_YEAR_FROM_DATE(:INPUT_DATE);
更具体地说:
CALL OUR_DB.GET_YEAR_FROM_DATE('01/02/2024');
但是,我收到以下错误: ORA-06576: 不是有效的函数或过程名称
函数 似乎编译正确。
我也试过做自己的函数(可能有语法错误),所以这可能是一个后续问题。
但是,上述函数已经存在于我们的数据库中,应该可以正常工作。 假设这是真的,如何从 dbeaver 中调用它?
我正在使用: dbeaver 21.3
还有来自 SELECT * FROM v$version 的 ORACLE 是: Oracle Database 19c 标准版 2 发行版 19.0.0.0.0 - 生产
为了它的价值,我使用了 Oracle SQL Developer Version 4.1.4.21 有一个非常相似的错误,可能是更详细的错误信息:
CALL OUR_DB.GET_YEAR_FROM_DATE('01/02/2024');
Error report -
SQL Error: ORA-06576: not a valid function or procedure name
06576. 00000 - "not a valid function or procedure name"
*Cause: Could not find a function (if an INTO clause was present) or
a procedure (if the statement did not have an INTO clause) to
call.
*Action: Change the statement to invoke a function or procedure
这似乎表明问题并不是真正的工具问题,而是底层数据库问题。
如果认为语法有效,是否只是权限问题?
函数和过程有很大的不同。
两者都得到参数,但只有函数 returns
一个值。
所以基本上 函数 可以在 select
语句或赋值语句的 PL/SQL 块中调用。请参阅下面的示例。
只有过程可以简单调用。
关于函数和过程及其区别的一些基本信息:
what-is-the-difference-between-function-and-procedure-in-pl-sql
functions-vs-procedures-in-oracle
例子
create function hello(par varchar2) return varchar2 as
begin
return ('world ' || par);
end;
/
-- wrong usage of function
CALL hello('hello')
SQL Error [6576] [65000]: ORA-06576: not a valid function or procedure name
-- legal use of function in SELECT
select hello('hello') from dual;
world hello
-- or in PL/SQL block
-- use Ctrl+Shift+O for SET serveroutput ON;
DECLARE
v_result varchar(100);
BEGIN
v_result := hello('helo');
dbms_output.put_line(v_result);
END;