首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >恢复ORA-06576:通过各种数据库工具不是简单函数调用的有效函数或过程名称。

恢复ORA-06576:通过各种数据库工具不是简单函数调用的有效函数或过程名称。
EN

Stack Overflow用户
提问于 2021-12-02 21:37:11
回答 1查看 3.6K关注 0票数 2

恢复ORA-06576:通过dbeaver数据库工具不是简单函数调用的有效函数或过程名称

我见过很多帖子,但它们不包括我所经历的情况。

我试图通过dbeaver对Oracle SQL执行一个简单的函数调用:

根据通过dbeaver获得的右键调用函数,函数语法如下:

代码语言:javascript
复制
CALL OUR_DB.GET_YEAR_FROM_DATE(:INPUT_DATE);

更具体地说:

代码语言:javascript
复制
CALL OUR_DB.GET_YEAR_FROM_DATE('01/02/2024');

但是,我得到以下错误: ORA-06576:不是一个有效的函数或过程名。

该函数似乎编译正确。

我还试图创建自己的函数(可能有语法错误),因此这可能是一个后续问题。

但是,上述功能在我们的数据库中是预先存在的,应该能够正常工作.假设这是真的,人们怎么称呼它从海狸?

我正在使用: dbeaver 21.3

此外,ORACLE从SELECT * from $version是: Oracle数据库19c标准版2发行版19.0.0.0.0 -生产

值得注意的是,我使用了Oracle SQL Developer版本4.1.4.21,有一个非常类似的错误,可能是更详细的错误消息:

代码语言:javascript
复制
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

这似乎表明问题并不是由工具造成的,而是底层数据库造成的。

如果语法被认为是有效的,那么它是否只是权限问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-02 22:24:34

功能和程序之间有很大的区别。

这两个都得到参数,但只函数returns一个值。

因此,函数基本上可以在select语句中调用,也可以在赋值语句中的PL/SQL块中调用。见下面的例子。

只有当你这样做的时候,才能简单地调用一个过程。

几种元素信息的功能、程序及其区别

what-is-the-difference-between-function-and-procedure-in-pl-sql

functions-vs-procedures-in-oracle

示例

代码语言:javascript
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70206786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档