Я новичок в 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 * 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
Любая помощь по этому вопросу была бы чрезвычайно оценена.
Заранее спасибо.
Craig
True или он может также использовать host/bind или локальную переменную в блоке ANON PL/SQL для получения возвращаемого значения – MStp