|
|
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Добрый день, а как правильно выбрать данные в таблицу. Есть запрос динамический, возвращающий N колонок есть заготовленная global temporary table (с достаточным запасом колонок) Хочу EXECUTE IMMEDIATE full_sql_data BULK COLLECT INTO TABLE_TT чтобы результат просто по порядку упала в таблицу, лишние колонки остались пустыми но что-то под вечер плохо соображаю, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 17:53 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Динамический select ты написал, а insert не осилил? BULK COLLECT INTO - это вставка в коллекцию, а не global temporary table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 18:00 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Да, я что-то спросил сам не понял что в общем нужно просто вставить в таблицу результат запроса, но по количеству колонок они не одинаковы EXECUTE IMMEDIATE 'INSERT INTO TABLE_TT full_sql_data'; почему на VALUES ругается, вроде ж можно без него? Если запрос 30 колонок возвращает, а в таблице 50. Или обязательно перечислять в таком случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 18:32 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
leprechaunобязательно перечислять в таком случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 18:32 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
leprechaunEXECUTE IMMEDIATE 'INSERT INTO TABLE_TT full_sql_data';Ты и правда заработался. Отдохни, поспи. Завтра со свежей головой продолжишь - уверен, у тебя все получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 18:33 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Да, спасибо за поддержку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 18:47 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, снова вечер, только занялся чего-то не заводится 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: не все переменные привязаны надо как-то иначе привязывать? я не знаю сколько раз параметр повторяется чтобы его нужно количество через запятую прописать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2017, 19:22 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
leprechaun Код: plsql 1. у меня в запросе одна переменная :P_DATE, правда упоминается очень много раз Код: plsql 1. RTFM Repeated Placeholder Names in Dynamic SQL Statements (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2017, 19:41 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Спасибо, завтра попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2017, 21:25 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста еще а чем заменить Varchar2 если у меня туда динамический запрос не помещается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 01:25 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
leprechaunчем заменить Varchar2 если у меня туда динамический запрос не помещаетсяВ 32к? - Знать быдлозапрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 08:06 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
leprechaun не помещаетсянегоже похваляться размером запроса. Если не клеится динамика, делай статику. Все равно вставляешь в таблицу с фиксированным количеством полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 08:07 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Ну не знаю. У меня на входе задано X таблиц с Y полей по шаблону имени из них. Я сначала строю список всех возможных колонок на основании списка таблиц. Это формирует структуру заголовка. Потом обхожу каждую таблицу и заполняю запросы, там где поле существует беру его имя, там где его нет NULL. Так и у меня получается UNION по каждой табличке. Но если их более 10 и колонок до 100, то конечно размер запроса великоват. Я изначально на меньшие объемы рассчитывал, потом условие изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 10:17 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
leprechaun, Какую задачу месье решает таким способом? Однозначно ли у месье соответствие типов данных и кодировки для одноимённых полей? Для чего месье нужен именно UNION? Есть ли у месье необходимость выполнять один большой запрос в одной большой транзакции? Рассматривал ли месье возможность последовательного выполнения небольших вставок в temporary table с последующей вставкой в целевую из неё, если уж никак кроме динамики не может решить свою задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 10:32 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 10:45 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
envleprechaun, Рассматривал ли месье возможность последовательного выполнения небольших вставок в temporary table с последующей вставкой в целевую из неё, если уж никак кроме динамики не может решить свою задачу? Да, как раз и подумал просто разбить на ряд запросов без UNION. К юниону чего-то привязался изначально, а без него можно и обойтись. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 11:29 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Привет, почти закончил своё дело, еще вопросик один остался если можно 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' должен быть объявлен. Какая там область видимости, как правильно переменную передать чтобы сообщить об ошибке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2017, 15:34 |
|
||
|
BULK COLLECT INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Медленно, но дошло) BEGIN EXECUTE IMMEDIATE insert_text USING P_DATE; EXCEPTION WHEN OTHERS THEN ... END; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2017, 20:57 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=133&tid=1884723]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 378ms |

| 0 / 0 |
