Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / BULK COLLECT INTO TABLE / 19 сообщений из 19, страница 1 из 1
05.12.2017, 17:53
    #39564607
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Добрый день, а как правильно выбрать данные в таблицу.

Есть запрос динамический, возвращающий N колонок
есть заготовленная global temporary table (с достаточным запасом колонок)

Хочу

EXECUTE IMMEDIATE full_sql_data BULK COLLECT INTO TABLE_TT

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

но что-то под вечер плохо соображаю, спасибо
...
Рейтинг: 0 / 0
05.12.2017, 18:00
    #39564619
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Динамический select ты написал, а insert не осилил? BULK COLLECT INTO - это вставка в коллекцию, а не global temporary table.
...
Рейтинг: 0 / 0
05.12.2017, 18:32
    #39564657
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Да, я что-то спросил сам не понял что
в общем нужно просто вставить в таблицу результат запроса, но по количеству колонок они не одинаковы

EXECUTE IMMEDIATE 'INSERT INTO TABLE_TT full_sql_data';

почему на VALUES ругается, вроде ж можно без него?

Если запрос 30 колонок возвращает, а в таблице 50. Или обязательно перечислять в таком случае
...
Рейтинг: 0 / 0
05.12.2017, 18:32
    #39564660
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
leprechaunобязательно перечислять в таком случае
...
Рейтинг: 0 / 0
05.12.2017, 18:33
    #39564661
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
leprechaunEXECUTE IMMEDIATE 'INSERT INTO TABLE_TT full_sql_data';Ты и правда заработался. Отдохни, поспи. Завтра со свежей головой продолжишь - уверен, у тебя все получится.
...
Рейтинг: 0 / 0
05.12.2017, 18:47
    #39564677
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Да, спасибо за поддержку)
...
Рейтинг: 0 / 0
06.12.2017, 19:22
    #39565383
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Здравствуйте, снова вечер, только занялся

чего-то не заводится

insert_text := 'INSERT INTO XXHR_TABLE_CHANGE_DATA_TT (' || col_list_to || ')';
insert_text := insert_text || ' ' || full_sql_data;
EXECUTE IMMEDIATE insert_text USING P_DATE;

у меня в запросе одна переменная :P_DATE, правда упоминается очень много раз
получаю ORA-01008: не все переменные привязаны

надо как-то иначе привязывать? я не знаю сколько раз параметр повторяется чтобы его нужно количество через запятую прописать
...
Рейтинг: 0 / 0
06.12.2017, 19:41
    #39565389
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
leprechaun
Код: plsql
1.
insert_text USING P_DATE;

у меня в запросе одна переменная :P_DATE, правда упоминается очень много раз
Код: plsql
1.
'begin ' || insert_text || '; end;' USING P_DATE;


RTFM Repeated Placeholder Names in Dynamic SQL Statements (FAQ)
...
Рейтинг: 0 / 0
06.12.2017, 21:25
    #39565431
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Спасибо, завтра попробую
...
Рейтинг: 0 / 0
11.12.2017, 01:25
    #39567450
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Подскажите пожалуйста еще а чем заменить Varchar2 если у меня туда динамический запрос не помещается
...
Рейтинг: 0 / 0
11.12.2017, 08:06
    #39567471
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
leprechaunчем заменить Varchar2 если у меня туда динамический запрос не помещаетсяВ 32к? - Знать быдлозапрос.
...
Рейтинг: 0 / 0
11.12.2017, 08:07
    #39567472
BULK COLLECT INTO TABLE
leprechaun не помещаетсянегоже похваляться размером запроса.
Если не клеится динамика, делай статику. Все равно вставляешь в таблицу с фиксированным количеством полей.
...
Рейтинг: 0 / 0
11.12.2017, 10:17
    #39567517
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Ну не знаю.

У меня на входе задано X таблиц с Y полей по шаблону имени из них.
Я сначала строю список всех возможных колонок на основании списка таблиц.
Это формирует структуру заголовка.
Потом обхожу каждую таблицу и заполняю запросы, там где поле существует беру его имя, там где его нет NULL.
Так и у меня получается UNION по каждой табличке. Но если их более 10 и колонок до 100, то конечно размер запроса великоват.

Я изначально на меньшие объемы рассчитывал, потом условие изменилось.
...
Рейтинг: 0 / 0
11.12.2017, 10:32
    #39567525
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
leprechaun,

Какую задачу месье решает таким способом?
Однозначно ли у месье соответствие типов данных и кодировки для одноимённых полей?
Для чего месье нужен именно UNION?
Есть ли у месье необходимость выполнять один большой запрос в одной большой транзакции?
Рассматривал ли месье возможность последовательного выполнения небольших вставок в temporary table с последующей вставкой в целевую из неё, если уж никак кроме динамики не может решить свою задачу?
...
Рейтинг: 0 / 0
11.12.2017, 10:45
    #39567536
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
leprechaunПодскажите пожалуйста еще а чем заменить Varchar2 если у меня туда динамический запрос не помещается

посмотрите dbms_sql


авторTaking VARCHAR2a, table of VARCHAR2(32767) , as an argument. The VARCHAR2A overload version of the procedure concatenates elements of a PL/SQL table statement and parses the resulting string. You can use this procedure to parse a statement that is longer than the limit for a single VARCHAR2 variable by splitting up the statement.

Taking a CLOB statement as an argument . You can use the CLOB overload version of the parse procedure to parse a SQL statement larger than 32K bytes.


.....
stax
...
Рейтинг: 0 / 0
11.12.2017, 11:29
    #39567565
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
envleprechaun,

Рассматривал ли месье возможность последовательного выполнения небольших вставок в temporary table с последующей вставкой в целевую из неё, если уж никак кроме динамики не может решить свою задачу?

Да, как раз и подумал просто разбить на ряд запросов без UNION.
К юниону чего-то привязался изначально, а без него можно и обойтись.
Спасибо.
...
Рейтинг: 0 / 0
12.12.2017, 15:34
    #39568395
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Привет, почти закончил своё дело, еще вопросик один остался если можно

insert_text := insert_text || ' ' || full_sql_data || '; EXCEPTION WHEN OTHERS THEN FND_FILE.put_line(FND_FILE.log, ''Ошибка выполнения запроса - '' || lst_of_tbl(l_tbl)); END;';
EXECUTE IMMEDIATE insert_text USING P_DATE;

Если я такой код выполняю в цикле перебора массива, то выпадает ошибка идентификатор 'lst_of_tbl' должен быть объявлен.

Какая там область видимости, как правильно переменную передать чтобы сообщить об ошибке
...
Рейтинг: 0 / 0
12.12.2017, 20:57
    #39568667
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BULK COLLECT INTO TABLE
Медленно, но дошло)

BEGIN
EXECUTE IMMEDIATE insert_text USING P_DATE;
EXCEPTION WHEN OTHERS THEN
...
END;
...
Рейтинг: 0 / 0
15.12.2017, 18:06
    #39570497
BULK COLLECT INTO TABLE
вопрос к автору- если без юнионов будешь делать вставки- не получится записей дубликатов ? или физически из разных таблиц забираешь данные ?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / BULK COLLECT INTO TABLE / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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