Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача функции табличного типа / 10 сообщений из 10, страница 1 из 1
13.08.2021, 11:17
    #40090498
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
Добрый день! Есть тип, объявленный на уровне схемы:
Код: plsql
1.
CREATE OR REPLACE TYPE ABC.T_NUM_ARRAY AS TABLE OF NUMBER;



Есть функция, которая принимает параметр этого типа на вход:
Код: plsql
1.
FUNCTION GET_VALUES_XML(iValues  IN ABC.T_NUM_ARRAY)RETURN XMLTYPE;



Как правильно передать этой функции параметр на вход?

Сейчас делаю так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  FGH.PKG_ABC.GET_VALUES_XML(iValues     => (SELECT ABC.T_NUM_ARRAY(VAL) FROM
                                              (SELECT 52618304 VAL FROM DUAL
                                              UNION ALL
                                              SELECT 57423355  FROM DUAL
                                              UNION ALL
                                              SELECT 78827256  FROM DUAL)
                                            ) 
                                   ) RES1
FROM DUAL;




Получаю ошибку:
ORA-01427: подзапрос одиночной строки возвращает более одной строки
...
Рейтинг: 0 / 0
13.08.2021, 11:53
    #40090517
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
...
Рейтинг: 0 / 0
13.08.2021, 12:37
    #40090533
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
123йй,

Ты довольно суров к автору, надо быть очень внимательным чтоб увидеть в разделе по ссылке

See Also:

Oracle Database SQL Language Reference for information about the CAST function ...
...
Рейтинг: 0 / 0
13.08.2021, 12:52
    #40090536
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
ultrasonic7,

Вам надо передать "константы", или набор чисел из таблички?

ps

FGH.PKG_ABC.GET_VALUES_XML(iValues => ABC.T_NUM_ARRAY( 52618304, 52618123,...), ...

.....
stax
...
Рейтинг: 0 / 0
13.08.2021, 12:58
    #40090538
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
Всё, я разобрался))
Нужно было передать набор чисел как одну переменную с типом ABC.T_NUM_ARRAY
Вот как это нужно было делать:
Код: plsql
1.
2.
3.
SELECT 
  FGH.PKG_ABC.GET_VALUES_XML(iValues =>(SELECT ABC.T_NUM_ARRAY(52618303, 57423352, 68827252) FROM DUAL)) RES1
FROM DUAL;
...
Рейтинг: 0 / 0
13.08.2021, 13:00
    #40090541
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
ultrasonic7
Всё, я разобрался))
...Вот как это нужно было делать:
Код: plsql
1.
2.
3.
SELECT 
  FGH.PKG_ABC.GET_VALUES_XML(iValues =>(SELECT ABC.T_NUM_ARRAY(52618303, 57423352, 68827252) FROM DUAL)) RES1
FROM DUAL;


SELECT ... FROM dual - нахрена ?
...
Рейтинг: 0 / 0
13.08.2021, 13:01
    #40090542
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
ultrasonic7
Всё, я разобрался))


зачем SELECT?

.....
stax
...
Рейтинг: 0 / 0
13.08.2021, 13:03
    #40090543
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
Ваш вариант тоже работает, он более краток даже
Stax
ultrasonic7,
FGH.PKG_ABC.GET_VALUES_XML(iValues => ABC.T_NUM_ARRAY( 52618304, 52618123,...), ...
...
Рейтинг: 0 / 0
13.08.2021, 13:08
    #40090546
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
По итогу вызов функции такой получился:
Код: plsql
1.
2.
3.
SELECT 
  FGH.PKG_ABC.GET_VALUES_XML(iValues =>ABC.T_NUM_ARRAY(52618303, 57423352, 68827252)) RES1
FROM DUAL;



В данном случае работа с ABC.T_NUM_ARRAY такая же, как и с SYS.ODCINUMBERLIST
...
Рейтинг: 0 / 0
13.08.2021, 13:18
    #40090548
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача функции табличного типа
ultrasonic7,

SQL> desc sys.odcinumberlist
sys.odcinumberlist VARRAY(32767) OF NUMBER

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача функции табличного типа / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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