Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Цикл по строке для вывода данных в update таблицы.  [new]
Борис Левченко
Member

Откуда:
Сообщений: 2
Всем привет.

Помогите советом, с SQL знаком поверхностно, а тут новичку подсунули задачку.

Есть некая табличка ANIMAL_TABLE:


ID ANIMAL_ID ANIMAL_NAMES ANIMAL_AGE ANIMAL_BIRTHDAY
-----------------------------------------------------------------------
1 345577234 БАРСИК 14 12.08.2005
2 237424284 МУРЗИК 10 04.03.2009
3 573342341 РЫЖИК NULL NULL
4 234277213 КОТОПЁС NULL NULL
5 298782321 ГАРФИЛД 6 22.01.2013

То есть, у некоторых животных не проставлены значение ANIMAL_AGE и ANIMAL_BIRTHDAY.

Так вот, еще есть файл animal_file.xlsx где как раз прописаны эти потерянные данные:

ANIMAL_ID ANIMAL_AGE ANIMAL_BIRTHDAY
573342341 1 06.09.2018
234277213 7 17.10.2011
298782321 6 22.01.2013

Задача написать скрипт, который проставит данные из файл animal_file.xlsx в таблицу ANIMAL_TABLE вместо NULL значений.

Пропарсить файлик animal_file.xlsx в строку с разделителем вроде не сложно.
Например:
Строка String_Animal = "573342341, 1, 06.09.2018 || 234277213, 7, 17.10.2011 || 298782321, 6, 22.01.2013"

Так вот тут возникают пару вопросов.
Это вообще реально сделать средствами SQL запроса, ибо строчек в таблице и данных в файле несколько тысяч?
Как пробежаться циклом по моей мега строке, чтобы получить значения для UPDATE?

Особого не ругайте, глубоких знаний по SQL пока не хватает, а тут ещё сам Oracle, вообщем задачку спихнули на меня, буду разбираться, благо интересно.

Спасибо.
12 авг 19, 14:27    [21947189]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1635
Для одного раза хватит руками вставить куски запроса в столбцы, и получить готовый список SQL-операторов.
12 авг 19, 14:32    [21947191]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1310
Борис Левченко,

Раз sql не особо, наверное, vba хорошо?) пишешь в excel макрос, который генерит скрипт insert и вуаля
12 авг 19, 14:40    [21947201]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
Oleg M.Ivanov
Member

Откуда: Москва
Сообщений: 1164
Борис Левченко
Пропарсить файлик animal_file.xlsx в строку с разделителем вроде не сложно.
Спасибо.

Зачем делать лишнюю работу? Тут надо создать временную табличку с данными из экселовского файла и апдейтить ее значениями ANIMAL_AGE и ANIMAL_BIRTHDAY таблицу ANIMAL_TABLE в соответствии с ANIMAL_ID.
12 авг 19, 15:12    [21947238]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
Oleg M.Ivanov
Member

Откуда: Москва
Сообщений: 1164
А... если задача как из эксел файла втавить в таблицу, то прямо в самом ексел файле можно дописать преобразование во вставки в таблицу:

Создаем таблицу:
CREATE TABLE ANIMAL_XLS
(
  ANIMAL_ID        NUMBER,
  ANIMAL_AGE       NUMBER,
  ANIMAL_BIRTHDAY  DATE
);

В эксел файле дописываем:
ABCDEFGHIJ
ANIMAL_IDANIMAL_AGEANIMAL_BIRTHDAY
573342341106.09.2018' insert into ANIMAL_XLS(ANIMAL_ID. ANIMAL_AGE. ANIMAL_BIRTHDAY) values ( 573342341. 7. to_date(' 06.09.2018'.'dd.mm.yyyy');
234277213717.10.2011 insert into ANIMAL_XLS(ANIMAL_ID. ANIMAL_AGE. ANIMAL_BIRTHDAY) values ( 234277213. 6. to_date(' 17.10.2011'.'dd.mm.yyyy');
298782321622.01.2013 insert into ANIMAL_XLS(ANIMAL_ID. ANIMAL_AGE. ANIMAL_BIRTHDAY) values ( 298782321. 6. to_date(' 22.01.2013'.'dd.mm.yyyy');

Где в столбцах E, G и I ссылки на A, B и C , соответственно. Ну и в D, F, H и J точки заменить на запятые, поскольку, форум не позволяет их поставить и преобразовывает в таблицу.
12 авг 19, 16:03    [21947311]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
Борис Левченко
Member

Откуда:
Сообщений: 2
Oleg M.Ivanov
Борис Левченко
Пропарсить файлик animal_file.xlsx в строку с разделителем вроде не сложно.
Спасибо.

Зачем делать лишнюю работу? Тут надо создать временную табличку с данными из экселовского файла и апдейтить ее значениями ANIMAL_AGE и ANIMAL_BIRTHDAY таблицу ANIMAL_TABLE в соответствии с ANIMAL_ID.

Да всё верно, коллега подсказал, что надо использовать временные таблицы)
(надо изменить название темы, чтобы не путать людей)

И даже с ним сочинили алгоритм:

1) Пишется скрипт, который создаёт временную таблицу. (допустим ANIMAL_XLS)
2) Потом в эту таблицу заливается всё что есть в нашем здоровом файлике.
3) Потом делается временная бэкап таблицы с животными(ANIMAL_BACKUP), которые найдутся по ANIMAL_ID и скопировать туда поля из ANIMAL_XLS.
4) Потом пишется скрипт инсёрта из временной ANIMAL_BACKUP в ANIMAL_TABLE, кроме тех, у кого в полях ANIMAL_AGE и ANIMAL_BIRTHDAY уже что-то есть, потому что с момента постановки задачи до её выполнения кто-то уже мог их сам заполнить.

Вроде логично, если нет, то подскажите.

----

Итак, создать временную табличку вроде несложно (может и нет), а вот как внести данные из файла в таблицу пока загадка.
Правильно я понимаю, что нужно как-то получить данные из файлика, и подставить их в запрос insert к ANIMAL_XLS?
Попробую поискать готовые программки на языках программирования для решения этой задачи, но может есть другие варианты?
Или как oragraf подсказал, что можно в excel макрос написать, который генерит скрипт insert.
Просто полей в файле чудовищно много около 10 000.
12 авг 19, 17:15    [21947403]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Мда...
Коллеги явно не ищут лёгких путей типа банального merge из external table.
12 авг 19, 17:29    [21947415]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
MirnyiAtom
Member

Откуда:
Сообщений: 35
Борис Левченко,
Это разовая задача? А то некоторые клиенты Oracle позволяют вставлять данные прямо копипастом.
13 авг 19, 07:43    [21947645]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
-2-
Member

Откуда:
Сообщений: 15330
andrey_anonymous
из external table.
на "около 10 000" полей.
13 авг 19, 08:21    [21947659]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
Mr.Fontaine
Member

Откуда: у меня столько мыслей?
Сообщений: 761
Борис Левченко
как внести данные из файла в таблицу пока загадка.
Правильно я понимаю, что нужно как-то получить данные из файлика, и подставить их в запрос insert к ANIMAL_XLS?
Попробую поискать готовые программки на языках программирования для решения этой задачи, но может есть другие варианты?
Или как oragraf подсказал, что можно в excel макрос написать, который генерит скрипт insert.
Просто полей в файле чудовищно много около 10 000.

Ну зачем такие извращения с программками и макросами? ctrl-c, ctrl-v за глаза в этом деле

P.S. "Поля в файле" - это строки? 10000 строк это много?
13 авг 19, 09:35    [21947704]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по строке для вывода данных в update таблицы.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
-2-
andrey_anonymous
из external table.
на "около 10 000" полей.

Препроцессор отменили?
13 авг 19, 12:56    [21947994]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить