powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция с возвратом разных типов данных
8 сообщений из 8, страница 1 из 1
Функция с возвратом разных типов данных
    #40100345
mmmaxxx2011
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, прошу подсказать возможно ли написать функцию с возвратом различных типов данных,
Например , есть таблица table в ней четыре колонки:
Col01 - тип varchar2
Col02 - тип number
Col03 - тип дата
Col04 - любой другой не blob

Условия:
1) Входящие параметры в функции func менять/добавлять нельзя
2)Возвращать rowtype нельзя
3) Приводить данные к типу varchar2 и возвращать varchar2 нельзя

Возвращаемые типы данные должны быть как в таблице table

Create of replace func (mode number) return is
v_table table%rowtype;
Begin

If nvl(mode,0) <= 0 then
Return;
End if;

-begin
Select * into v_table
From table
Where rownum <= 1;
Exception
When others then null;
End;

If mode = 1 then
--возврат v_table.col01 с ее типом
End if;

If mode = 2 then
-- возврат v_table.col02 с ее типом
End if;

If mode = 3 then
-- возврат v_table.col03 с ее типом
End if;

If mode = 4 then
-- возврат v_table.col04 с ее типом
End if;

End;

Это возможно?
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100359
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mmmaxxx2011,

Если коротко, то нельзя, если пошире, то в оракле есть универсальный тип anydata.
А что ты вообще собираешься делать с результатом функции?
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100360
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mmmaxxx2011
Добрый день, прошу подсказать возможно ли написать функцию с возвратом различных типов данных,
Например , есть таблица table в ней четыре колонки:
Col01 - тип varchar2
Col02 - тип number
Col03 - тип дата
Col04 - любой другой не blob

Условия:
1) Входящие параметры в функции func менять/добавлять нельзя
2)Возвращать rowtype нельзя
3) Приводить данные к типу varchar2 и возвращать varchar2 нельзя

Возвращаемые типы данные должны быть как в таблице table

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Create of replace func (mode number) return is
v_table table%rowtype;
Begin

If nvl(mode,0) <= 0 then
Return;
End if;

-begin
Select * into v_table
From table 
Where rownum <= 1;
Exception 
When others then null;
End;

If mode =  1 then
--возврат  v_table.col01 с  ее типом
End if;

If mode =  2 then
-- возврат  v_table.col02 с ее типом
End if;

If mode =  3 then
-- возврат  v_table.col03 с ее типом
End if;

If mode =  4 then
-- возврат  v_table.col04 с ее типом
End if;

End;


Это возможно?

Для оформления кода используйте, пожалуйста тэг SRC.
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100366
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно возвращать не rowtype, а свой из трех основных типов
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100367
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и When others then null в данном примере моветон
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100448
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mmmaxxx2011,

А чем пакет с overloaded ф-циями не угодил?

SY.
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100454
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
SQL> CREATE TABLE 
  2    dropme_table( Col01 -- тип varchar2
  3                , Col02 -- тип number
  4                , Col03 -- тип дата
  5                , Col04 -- любой другой не blob
  6  ) as select 'str'||rownum, rownum, trunc(sysdate)+rownum, systimestamp
  7  from dual connect by level < 5
  8  ;

Table DROPME_TABLE created.

SQL> select * from dropme_f_ptf(dropme_table,1);

COL01                                      
-------------------------------------------
str1
str2
str3
str4

SQL> select * from dropme_f_ptf(dropme_table,2);

     COL02
----------
         1
         2
         3
         4

SQL> select * from dropme_f_ptf(dropme_table,3);

COL03   
--------
29.09.21
30.09.21
01.10.21
02.10.21

SQL> select * from dropme_f_ptf(dropme_table,4);

COL04                             
----------------------------------
28.09.21 14:06:14,626958000 +03:00
28.09.21 14:06:14,626958000 +03:00
28.09.21 14:06:14,626958000 +03:00
28.09.21 14:06:14,626958000 +03:00



...dbms_sql.return_result, опять-таки, если применимо
...
Рейтинг: 0 / 0
Функция с возвратом разных типов данных
    #40100481
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
А чем пакет с overloaded ф-циями не угодил?
Перегруженные функции не могут отличаться только типом результата.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция с возвратом разных типов данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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