首页 > 解决方案 > 我们可以从 oracle 中的匿名块调用过程或函数吗?

问题描述

我可以通过匿名块中的过程或函数调用 pl/sql 对象吗?

这是一个非常常见的面试问题。

谢谢

标签: oracle

解决方案


是的:

SQL> set serveroutput on
SQL> --
SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

SQL> show user;
USER is "C##TEST"
SQL> --
SQL> CREATE OR REPLACE PROCEDURE myproc
  2  IS
  3  BEGIN
  4   dbms_output.put_line('myproc: OK');
  5  END;
  6  /

Procedure created.

SQL> --
SQL> show errors
No errors.
SQL> --
SQL> CREATE OR REPLACE FUNCTION myfunc RETURN VARCHAR2
  2  IS
  3  BEGIN
  4   return 'myfunc: OK';
  5  END;
  6  /

Function created.

SQL> --
SQL> show errors
No errors.
SQL> --
SQL> begin
  2   myproc;
  3  end;
  4  /
myproc: OK

PL/SQL procedure successfully completed.

SQL> --
SQL> declare
  2   myvar VARCHAR2(50);
  3  begin
  4   select myfunc into myvar from dual;
  5   dbms_output.put_line(myvar);
  6  end;
  7  /
myfunc: OK

PL/SQL procedure successfully completed.

推荐阅读