Skip to content
Advertisement

Revisting ORA-06576: not a valid function or procedure name for simple function call via various database tools

Revisting ORA-06576: not a valid function or procedure name for simple function call via dbeaver database-tool

I have seen many posts, but they don’t cover the situation I am experiencing.

I am trying to do a simple function call to Oracle SQL via dbeaver:

According to the right-click call function obtained via dbeaver the function syntax it is:

CALL OUR_DB.GET_YEAR_FROM_DATE(:INPUT_DATE);

To be more concrete:

CALL OUR_DB.GET_YEAR_FROM_DATE('01/02/2024');

However, I get the following error: ORA-06576: not a valid function or procedure name

The function does seem to compile correctly.

I also tried to make my own function (which may have syntax errors), so that may be a follow-up question.

However, the above function is pre-existing on our database and should work correctly. Assuming that is true, how does one call it from dbeaver?

I am using: dbeaver 21.3

and also the ORACLE from SELECT * FROM v$version is: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 – Production

For what it’s worth, I used Oracle SQL Developer Version 4.1.4.21 There is a very similar error, possibly a more detailed error message:

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

This would seem to indicate that the problem is not really due to the tool, but the underlying database.

If the syntax is thought to work, could it just be a permissions issue?

Advertisement

Answer

There is a substantial difference between the function and procedure.

Both get parameters, but only function returns a value.

So basically a function can be called in a select statement or in a PL/SQL block in an assign statement. See example below.

Only a procedure can be simple called as you do it.

Some elementar information abour functions and procedures and their distinctions:

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

functions-vs-procedures-in-oracle

Examples

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;
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement