重新访问 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;