【发布时间】:2012-02-27 03:40:11
【问题描述】:
我是 Oracle 和 SQL 的新手,我正在尝试从 SQL*Plus 中执行一个简单的测试函数。我的函数称为 tf(用于测试函数),它在一个名为 tf.sql 的文件中定义如下;
create or replace
function
tf
(
arg1 in varchar2
)
return number
as
return_value number;
begin
return_value := 0;
dbms_output.put_line('Argument 1 = ' || arg1);
return return_value;
end;
/
我可以使用以下命令成功将此函数加载到 Oracle 中;
SQL> start ./tf.sql
作为执行此命令的结果,SQL*Plus 只声明 ;
Function created.
当我从 SQL*Plus 命令提示符执行以下命令时(在我调用 set serveroutput on 之后);
SQL> exec dbms_output.put_line(SYSTEM.TF('Hello'));
我得到以下输出;
Argument = Hello
0
PL/SQL procedure successfully completed.
现在,如果我尝试直接从 SQL*Plus 命令提示符执行我的函数,请使用以下命令;
SQL> exec SYSTEM.TF('Hello');
然后我收到来自 SQL*Plus 的以下错误消息;
BEGIN SYSTEM.TF('Hello'); END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'TF' is not a procedure or is undefined
ORA-06550: ;ine 1, column 7
PL/SQL: Statement ignored
有人能帮我解释一下吗?我无法弄清楚为什么我的函数在第一种情况下似乎成功执行,但在第二种情况下却没有。
如果我从 SQL*Plus 命令提示符执行以下命令;
SQL> select * from user_objects where object_name = 'TF';
然后我得到以下结果;
OBJECT_NAME
-----------
TF
SUBOBJECT_NAME
--------------
OBJECT_ID
---------
74475
DATA_OBJECT_ID
--------------
OBJECT_TYPE
-----------
FUNCTION
CREATED
-------
05-FEB-12
LAST_DDL_
---------
05-FEB-12
TIMESTAMP
---------
2012-02-05:02:11:15
STATUS
------
VALID
T
-
N
G
-
N
S
-
N
EDITION_NAME
------------
1
对此的任何帮助将不胜感激。
提前致谢。
克雷格
【问题讨论】: