sql - 重新审视 ORA-06576 : not a valid function or procedure name for simple function call via various database tools

标签 sql oracle function oracle-sqldeveloper dbeaver

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

就其值(value)而言,我使用了 Oracle SQL Developer 版本 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

这似乎表明问题实际上并不是由工具引起的,而是由底层数据库引起的。

如果语法被认为有效,这是否只是权限问题?

最佳答案

函数过程之间存在显着差异。

两者都获取参数,但只有函数返回一个值。

因此,基本上可以在 select 语句或赋值语句的 PL/SQL block 中调用函数。请参阅下面的示例。

只有一个过程可以在您执行时简单地调用。

关于函数过程及其区别的一些基本信息:

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;

关于sql - 重新审视 ORA-06576 : not a valid function or procedure name for simple function call via various database tools,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70206786/

相关文章:

mysql - 左连接为未连接的列提供了意外的结果

MySQL - 基于与其他表的外键的自定义附加列

sql - 多次授予后删除 postgres 角色和数据库

java - ORA-01810 : format code appears twice : jdbctemplate

c++ - 如何在类函数中正确初始化指针?

python - ValueError : Length mismatch: Expected axis has 23 elements, 新值有 2 个元素。 Pandas 长度不匹配

php - 没有获得正确数量的赞成票和反对票

oracle - 如果存在则删除索引...如果存在则创建

java - Oracle Java 存储过程

javascript - 函数回调结构的最佳实践是什么?