调用包中的过程或函数
Posted
技术标签:
【中文标题】调用包中的过程或函数【英文标题】:Calling Procedure or function in the package 【发布时间】:2021-08-07 07:19:51 【问题描述】:我已经在其中创建了一个包和过程和函数。 我有一个小小的疑问。 如果我在包中同时创建了过程名称employee_dtls employee_dtls 过程作为架构中的独立对象。
但我想在我的包中调用独立过程employee_dtls,但是当我试图调用时 包中的过程正在执行,但没有调用独立的过程。
我假设由于两个过程的名称相同,所以它在包内调用过程。
请帮助我在这种情况下该怎么办?
【问题讨论】:
这是家庭作业还是真实系统?我很难想象在真实系统中的情况,您真的想要一个与包中的过程同名的独立过程。如果是家庭作业,只需使用完全限定的对象名称。如果它是一个真实的系统,请退后一步,重新评估您的命名标准。 @JustinCave 谢谢你的回复。这只是为了检查,我们如何才能做到这一点。 【参考方案1】:你能做什么?限定程序名称(正如贾斯汀评论的那样)。方法如下(在代码中读取 cmets):
独立程序:
SQL> create or replace procedure p_test is
2 begin
3 dbms_output.put_line('...standalone P_TEST procedure');
4 end;
5 /
Procedure created.
打包程序:
SQL> create or replace package pkg_test is
2 procedure p_test;
3 procedure p_run;
4 end;
5 /
Package created.
SQL> create or replace package body pkg_test is
2 procedure p_test is
3 begin
4 dbms_output.put_line('...packaged P_TEST procedure');
5 end;
6
7
8 procedure p_run is
9 begin
10 dbms_output.put_line('calling P_TEST');
11 p_test; -- no qualifier - runs the packaged procedure (that's what you have now)
12
13 dbms_output.put_line('calling SCOTT.P_TEST');
14 scott.p_test; -- procedure name preceded by owner name - runs the standalone procedure
15
16 dbms_output.put_line('calling PKG_TEST.P_TEST');
17 pkg_test.p_test; -- procedur ename preceded by package name - runs the packaged procedure
18 end;
19 end;
20 /
Package body created.
测试:
SQL> set serveroutput on;
SQL> exec pkg_test.p_run;
calling P_TEST
...packaged P_TEST procedure
calling SCOTT.P_TEST
...standalone P_TEST procedure
calling PKG_TEST.P_TEST
...packaged P_TEST procedure
PL/SQL procedure successfully completed.
SQL>
【讨论】:
以上是关于调用包中的过程或函数的主要内容,如果未能解决你的问题,请参考以下文章