我可能不明白这个问题,但是 - 这就是 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>
所以,这是一个不接受任何参数并返回字符串的函数。