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