Меня, как человека с полным отсутствием опыта работы с ораклом, и привыкшего к MySQL или, в крайнем случае, к Postgres, задача вызова хранимой функции поставила поначалу в тупик. Сделать, как в MySQL:
SELECT myf("blablabla")
в оракле нельзя. Времени читать документацию или книжки не было (хотя надо будет когда-нибудь обязательно освоить оракл, но не сейчас), поэтому я, немного погуглив и поэкспериментировав, нашел такой вариант:
SET SERVEROUTPUT ON;Т.е. объявляем анонимный блок, записываем результат выполнения функции в переменную, а потом печатаем её с помощью dbms_output.
declare
result VARCHAR2(100);
begin
result := myf("blablabla");
DBMS_OUTPUT.ENABLE;
dbms_output.put_line(result);
end;
Хм, а почему в Oracle нельзя применить Ваш первый вариант?
ОтветитьУдалитьЯ вот попробовал только что,
select <> from dual очень прекрасно отрабатывает.
select имя функции (значение входного параметра) from dual
ОтветитьУдалитьА то почему-то обрезал браузер в первом комменте.
Здесь ключевое отличие от моего варианта - "from dual", а я пробовал без "from" вообще, в MySQL так можно. И когда у меня не получилось, полез в какие-то дебри, Ваш вариант конечно проще, чем мой)
Удалитьа вот кстати:
ОтветитьУдалитьПрисоединен к:
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
SQL> SET SERVEROUTPUT ON;
SQL> declare res_ NUMBER;
2 begin
3 res_ := flak_checkinn(1, '111');
4 DBMS_OUTPUT.ENABLE;
5 dbms_output.put_line(res_);
6 end;
7
8 ;
9 ;
что нужно нажать, что бы запустить на исполнение-то? )))
вариант с from daul - просто рулит и педалит )))
select from dual рулит для удаленного вызова функции только если запрос (хранимая функция + параметры) меньше 30 символов. Иначе можно схлопотать сообщение об ошибке ORA-00972. Если длина вызова более, то только через создание анонимного блока, как в топике.
Удалить