![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
charodej |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 26.3.2008 Где: Тула Репутация: нет Всего: нет |
Добрый день, уважаемые участники форума!
Я только недавно начал работать с СУБД Oracle и поэтому мой вопрос быть может, ламерский... Значит так, СУБД Oracle будет поддерживаться нашей программой, которая автоматически формирует скрипт на вставку в базу каких-либо данных. Где-то в недрах программы формируются данные, которые необходимо вставить в поле типа blob, по сути это массив байтов... byte[] В других СУБД я могу использовать оператор типа
ну или
в зависимости от СУБД... Oracle не позволяет использовать в операторе вставки строковый литерал длиной более 4000 символов, и поэтому для больших объёмов данных я решил делать примерно следующее: разбиваю свой массив байтов на блоки по 4000 и...
... что приведет к потере призводительности не можете подсказать более элегантный способ решения, желательно с примером кода, повторяю, ведь я совсем ламер ... или хотя бы можно как то не использовать временную переменную? |
||||||
|
|||||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
данные выгружайте в файл а потом загружайте в Oracle через sql*loader
-------------------- It's better to burn out than to fade away. |
|||
|
||||
charodej |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 26.3.2008 Где: Тула Репутация: нет Всего: нет |
дело в том, что сформировать нужно полностью рабочий скрипт, и данные выгружать в файл тоже в скрипте, и оператор записи в файл я думаю тоже не позволит вставить данные больше 4000 символов...
по сути это использование лишь другого временного хранилища данных : файл вместо переменной , или Вы имели в виду что то другое? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15717 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 537 |
SQL*Loader поддерживает работу с LOB. Почитай тут.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
charodej |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 26.3.2008 Где: Тула Репутация: нет Всего: нет |
замечательный инструмент, но дело - то в том, что смысл программы - создать скрипт для вставки в базу данных, а потом спросить пользователя - хотите выполнить сейчас? если бы он всегда говорил: "Yes, of course", тогда можно было бы использовать сохранение в файл, а потом загрузку... А ну как он ответит, "Нет, погоди, я ещё пятку не почесал, скрипт я пока сохраню, а выполню потом", данные для вставки то мы имеем только во время работы программы... |
|||
|
||||
charodej |
|
||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 26.3.2008 Где: Тула Репутация: нет Всего: нет |
И в продолжение темы хотелось бы спросить вот что:
если для поля типа clob для решения этой же проблемы можно использовать операции типа
имеется ли в Oracle механизм, позвляющий каким-либо образом добавить(обновить) данные в поле типа blob не используя временную переменную, то есть не так:
а напрямую с базой данных... Ведь если в базе лежит blob на 1 Гб и я хочу его обновить на 1 килобайт, мне что считывать его из базы обязательно? |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15717 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 537 |
Почему пользователь обязательно должен выполнять SQL скрипт? Пусть используют файл с данными для SQL*Loader-а, какая им разница. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
charodej |
|
||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 26.3.2008 Где: Тула Репутация: нет Всего: нет |
Да, так можно, просто в самой программе классы были заточены на генерацию скрипта, а потом последовательное считывание команд из скрипта и отправку на сервер, кроме того команды могут быть не только вставки, но и выборочного удаления и обновления записей, а loader этого сделать не может... Вобщем в итоге делаю так: 1. Команды удаления(не всех, а определенных строк) делаю в скрипте 2. Команды обновления делаю так: создаю временную таблицу, sqlloader-om заливаю туда записи, которые нужно обновить, потом обновляю примерно так:
3. Команды вставки выполняю sqlloader-om Геморно конечно, ну другого выхода пока не вижу... Возникают дополнительные подводные камни: 1. Записи удаляются в скрипте, а потом в sqlloader - e может произойти ошибка, из за чего новые не вставятся, и мы теряем данные, поэтому видимо придется перед каждым выполнением делать бэкап 2. Я не нашел в документации по loader-y параметров, позволяющих отключить ограничения типа внешних ключей, индексов и т.д. а программа должна позволять это делать(да ещё и потом пытаться включить) в скрипте это сделать можно, а при работе с loader - om видимо никак(( P.S. Sqlninja, LSD, идея в целом была хорошая, большое спасибо Это сообщение отредактировал(а) charodej - 8.9.2008, 09:36 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |