powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Цикл по строке для вывода данных в update таблицы.
14 сообщений из 14, страница 1 из 1
Цикл по строке для вывода данных в update таблицы.
    #39848324
Всем привет.

Помогите советом, с 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, вообщем задачку спихнули на меня, буду разбираться, благо интересно.

Спасибо.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848325
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для одного раза хватит руками вставить куски запроса в столбцы, и получить готовый список SQL-операторов.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848329
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Левченко,

Раз sql не особо, наверное, vba хорошо?) пишешь в excel макрос, который генерит скрипт insert и вуаля
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848355
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Борис ЛевченкоПропарсить файлик animal_file.xlsx в строку с разделителем вроде не сложно.
Спасибо.
Зачем делать лишнюю работу? Тут надо создать временную табличку с данными из экселовского файла и апдейтить ее значениями ANIMAL_AGE и ANIMAL_BIRTHDAY таблицу ANIMAL_TABLE в соответствии с ANIMAL_ID.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848391
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А... если задача как из эксел файла втавить в таблицу, то прямо в самом ексел файле можно дописать преобразование во вставки в таблицу:

Создаем таблицу:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE ANIMAL_XLS
(
  ANIMAL_ID        NUMBER,
  ANIMAL_AGE       NUMBER,
  ANIMAL_BIRTHDAY  DATE
);


В эксел файле дописываем:
ABCDEFGHIJANIMAL_IDANIMAL_AGEANIMAL_BIRTHDAY573342341106.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 точки заменить на запятые, поскольку, форум не позволяет их поставить и преобразовывает в таблицу.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848451
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.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848458
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда...
Коллеги явно не ищут лёгких путей типа банального merge из external table.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848589
MirnyiAtom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Борис Левченко,
Это разовая задача? А то некоторые клиенты Oracle позволяют вставлять данные прямо копипастом.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848598
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousиз external table.на "около 10 000" полей.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848621
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Левченко как внести данные из файла в таблицу пока загадка.
Правильно я понимаю, что нужно как-то получить данные из файлика, и подставить их в запрос insert к ANIMAL_XLS?
Попробую поискать готовые программки на языках программирования для решения этой задачи, но может есть другие варианты?
Или как oragraf подсказал, что можно в excel макрос написать, который генерит скрипт insert.
Просто полей в файле чудовищно много около 10 000.
Ну зачем такие извращения с программками и макросами? ctrl-c, ctrl-v за глаза в этом деле

P.S. "Поля в файле" - это строки? 10000 строк это много?
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #39848754
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey_anonymousиз external table.на "около 10 000" полей.
Препроцессор отменили?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Цикл по строке для вывода данных в update таблицы.
    #40049682
Qiwi1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf
Борис Левченко,

Раз sql не особо, наверное, vba хорошо?) пишешь в excel макрос, который генерит скрипт insert и вуаля


У меня примерно такая же задача и задача ее решить с помощью VBA, а не SQL. C SQL проблем-то нет, а вот в VBA я новичок.

Пока реализовано загрузка таблицы из БД, где есть значения NULL в некоторых полях, на лист xlsm файла с помощью макроса и на другом листе файла таблица в которой вместо некоторых значений null проставлены значения. Как обновить таблицу в БД этими значениями?
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #40049735
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обновить таблицу в БД этими значениями?

с помощью VBA

На VBA сформировать SQL-запрос.

Код: plsql
1.
update table set [поля] where [уникальный ключ или другие условия];



Либо использовать какой-либо updateable resultset, если такой есть.
...
Рейтинг: 0 / 0
Цикл по строке для вывода данных в update таблицы.
    #40049759
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qiwi1,
Задача выеденного яйца не стоит.

На страничке в экселе в ячейки вставляешь формулы
Код: vbnet
1.
=СЦЕПИТЬ("update my_table set a="; A1;", b=";B1;" where ...";";")


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


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