Передача массива в Oracle SQL и использование массива - PullRequest
1 голос
/ 21 февраля 2011

Я столкнулся со следующей проблемой, я передаю массив строк в Oracle SQL, и я хотел бы получить все данные, где его идентификатор находится в списке ...

вот что я пробовал ...

OPEN O_default_values FOR 
SELECT  ID AS "Header",
        VALUE AS "DisplayValue", 
        VALUE_DESC AS "DisplayText"
FROM TBL_VALUES
WHERE ID IN I_id;

I_id - это массив, описываемый следующим образом: TYPE gl_id IS TABLE OF VARCHAR2 (15) INDEX BY PLS_INTEGER;

Я получаю сообщение об ошибке "выражение имеет неправильный тип". Массив I_id может иногда достигать 600 записей. У меня вопрос, есть ли способ сделать то, что я только что описал, или мне нужно создать какой-то курсор и перебрать массив?

Что было опробовано - динамически создать строку SQL, а затем сопоставить значения до конца строки SQL и затем выполнить ее. Это будет работать для небольшого объема данных, а размер строки является статическим, что приведет к некоторым другим ошибкам (например, к индексу вне диапазона).

1 Ответ

3 голосов
/ 21 февраля 2011

посмотрите по этой ссылке: http://asktom.oracle.com/pls/asktom/f?p=100:11:620533477655526::::P11_QUESTION_ID:139812348065

Фактически, вам нужна переменная в списке с переменными связывания.

обратите внимание:

"the" устарела. в этом нет необходимости сегодня.

ТАБЛИЦА это замена

выберите * из таблицы (функция);


, поскольку у вас уже есть тип, все, что вам нужно сделать, это что-то похожее на ниже:

OPEN O_default_values FOR 
SELECT  ID AS "Header",
        VALUE AS "DisplayValue", 
        VALUE_DESC AS "DisplayText"
FROM TBL_VALUES
WHERE ID IN (select column_value form  table(I_id));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...