powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по перезагрузке функций, возвращающих разные типы
6 сообщений из 6, страница 1 из 1
Вопрос по перезагрузке функций, возвращающих разные типы
    #40029997
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
function f1(p1 number) return number;
function f1(p1 number) return varchar2;
...
declare v1 number; v2 varchar2;
begin
v1 := f1(123);
v2 := f1(123);
end;


Но такой вариант перезагрузки является неоднозначным.
Не подскажите, можно ли это как-то обойти, не добавляя в список аргументов фиктивный аргумент?
Переделать все на процедуры с out-параметром разного типа можно, но это на крайний случай, мне бы хотелось сохранить возможность использования функции.
...
Рейтинг: 0 / 0
Вопрос по перезагрузке функций, возвращающих разные типы
    #40029998
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С другой стороны.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
--package test
function f1(p1 number) return number AS BEGIN return 123; end;
procedure f1(p1 number, res out number) is begin res := 234; end;

--sql*plus
SQL> declare
  2  v1 number;
  3  v2 number;
  4  begin
  5  v1 := test.f1(1);
  6  test.f1(2, v2);
  7  dbms_output.put_line('v1='||v1);
  8  dbms_output.put_line('v2='||v2);
  9  end;
 10  /
v1=123
v2=234



Это штатное и обычное использование или сомнительный трюк?
Если это обычно, то такое меня вполне устроит.
...
Рейтинг: 0 / 0
Вопрос по перезагрузке функций, возвращающих разные типы
    #40030023
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Для начала, а откуда вообще возникал необходимость делать неоднозначную перегрузку по возвращаемому типу? Это как минимум чревато PLS-307: too many declarations при вызове в sql или при любом другом неявном приведении типов.

В чём глубокий смысл такого странного желания?
...
Рейтинг: 0 / 0
Вопрос по перезагрузке функций, возвращающих разные типы
    #40030026
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
хотелось сохранить возможность использования функции.
RTFM Subprograms that You Cannot Overload
...
Рейтинг: 0 / 0
Вопрос по перезагрузке функций, возвращающих разные типы
    #40030031
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Это как минимум чревато PLS-307: too many declarations при вызове в sql или при любом другом неявном приведении типов.

Под "является неоднозначным" я это и имею ввиду.
Поэтому спрашивал про способы обхода, чтобы устранить неоднозначность.

env
В чём глубокий смысл такого странного желания?

Просто хочется.
По сути это процедура -- она выполняет определенные проверки, производит определенные изменения (находит или добавляет объект в БД) и возвращает данные объекта.
Но в некоторых случаях мне не нужны все данные объекта, а нужен только его идентификатор или код, тогда я использую его как функцию.
Или в некоторых ЯП может быть сложно или неудобно оформлять блок PL/SQL, в этих случаях проще получить данные в виде "select f1(123) from dual".

Elic
RTFM

Спасибо, но я и сам догадался, что Oracle не умеет заглядывать слева от точки использования функции и соответственно нельзя перезагружать функцию с разными возвращаемыми типами.
Такое ограничение можно обойти разными способами, например так:
Код: plsql
1.
2.
3.
4.
5.
6.
function f1(p1 number, px number) return number;
function f1(p1 number, px varchar2) return varchar2;
...
declare v1 number; v2 varchar2;
v1 := f1(123, 0);
v2 := f1(123, ' ');


Такой способ мне не нравился.
Но вот найденная возможность перезагружать тип (функция или процедура) вполне устраивает, если только не окажется, что это баг.
...
Рейтинг: 0 / 0
Вопрос по перезагрузке функций, возвращающих разные типы
    #40030041
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
если только не окажется, что это баг.
Читай документацию, а то догадалка даст сбой.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по перезагрузке функций, возвращающих разные типы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]