修訂 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: not a valid function or procedure name
該功能也似乎正確編譯。
我也嘗試制作自己的函式(可能有語法錯誤),所以這可能是一個后續問題。
但是,上述函式預先存在于我們的資料庫中,應該可以正常作業。假設這是真的,如何從 dbeaver 呼叫它?
我正在使用:dbeaver 21.3
還有來自 SELECT * FROM v$version 的 ORACLE 是:Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
對于它的價值,我使用了 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
這似乎表明問題實際上不是由工具引起的,而是由底層資料庫引起的。
如果認為該語法有效,是否只是權限問題?
uj5u.com熱心網友回復:
函式和程式之間有本質的區別。
兩者都得到引數,但只作用于 returns一個值。
所以基本上一個函式可以在select陳述句中呼叫,也可以在賦值陳述句中的 PL/SQL 塊中呼叫。請參閱下面的示例。
只有一個程序可以在你做的時候被簡單地呼叫。
關于函式和程序及其區別的一些基本資訊:
pl-sql 中函式和程序之間的區別是什么
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/373087.html
標籤:sql 甲骨文 功能 oracle-sqldeveloper 海狸
上一篇:我可以插入到同一個表中但在sql開發人員的不同作業表中嗎?
下一篇:OracleSQL列比較
