Я новичок в 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выход сервера включен);
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
Любая помощь по этому вопросу будет очень ценна.
Заранее спасибо.
Крейг