我可能不明白这个问题,但是 - 这就是 Oracle 所做的。dbo
我有点懒惰地创建了一个新用户,所以我改用了这个用户名scott
,但我想这并不重要。
当前连接为scott
SQL> show user
USER is "SCOTT"
创建一个名为scott
(显然,由 拥有scott
,这意味着它在scott
模式中)和其中的一个函数foobar
(它返回我所在的位置):
SQL> create or replace package scott as
2 function foobar return varchar2;
3 end;
4 /
Package created.
SQL> create or replace package body scott as
2 function foobar return varchar2 is
3 begin
4 return 'package function';
5 end;
6 end;
7 /
Package body created.
创建一个名为foobar
(再次由 拥有scott
)的独立函数:
SQL> create or replace function foobar return varchar2 is
2 begin
3 return 'standalone function';
4 end;
5 /
Function created.
好的; 所以,当我们逐渐调用它们时会返回什么(foobar
> scott.foobar
> scott.scott.foobar
):
SQL> select foobar from dual;
FOOBAR
--------------------------------------------------------------------------------
standalone function
SQL> select scott.foobar from dual;
FOOBAR
--------------------------------------------------------------------------------
package function
SQL> select scott.scott.foobar from dual;
FOOBAR
--------------------------------------------------------------------------------
package function
SQL>
因此,没有歧义;规则就是规则。唯一模棱两可的东西(从我人类的角度来看)是我制造的。到底是什么迫使我创建了一个名为 的包scott
?
从对象 ID 开始:这是您要找的吗?
SQL> select object_name, object_type, object_id
2 from user_objects
3 where object_name in ('SCOTT', 'FOOBAR');
OBJECT_NAME OBJECT_TYPE OBJECT_ID
------------ ------------------- ----------
FOOBAR FUNCTION 25973
SCOTT PACKAGE 25971
SCOTT PACKAGE BODY 25972
SQL>
[编辑]
阅读您的评论后,也许这回答了您的问题(至少,一点点):
SQL> describe scott.foobar
FUNCTION scott.foobar RETURNS VARCHAR2
SQL>
所以,这是一个不接受任何参数并返回字符串的函数。