我是Oracle和SQL的新手,正試圖從SQL * Plus中執行一個簡單的測試函數。我的函數被稱爲tf(用於測試函數),它在名爲tf.sql的文件中定義如下:從Oracle SQL * Plus內執行函數時的行爲不一致?
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命令提示以下命令(後我已經調用集SERVEROUTPUT);
SQL> exec dbms_output.put_line(SYSTEM.TF('Hello'));
我得到以下輸出;現在
Argument = Hello
0
PL/SQL procedure successfully completed.
,如果我嘗試直接從SQL *執行我的功能加上命令提示符下,使用下面的命令;
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
任何對此的幫助將非常感激。
在此先感謝。
克雷格
是真的,或者他也可以使用主機/綁定或本地變量在annon PL/SQL塊獲得返回值 – MStp 2012-02-05 05:09:44