Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/211: Рейтинг темы: голосов - 211, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10

Перенос данных с одной таблицы в другую

24.10.2013, 10:46. Показов 39668. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста составить запрос. Нужно перенести из данные таблицы1 в таблицу2, так, чтобы не потерять информацию в блобах. Составляю такой запрос:
SQL
1
SELECT 'INSERT INTO chema1.table1(ID, BLOB1, BLOB2) VALUES (select max (ID) FROM schema1.table1, ''' || ID || ''', ''' || BLOB1 || ''', BLOB2') FROM schema2.table
Но блобы не достаются. Или подскажите ресурс, буду очень благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2013, 10:46
Ответы с готовыми решениями:

Хитрый перенос данных из одной таблицы в другую
Всем привет. Есть две таблицы: предметы и хранилище. Нужно осуществить миграцию данных одного конкретного предмета в таблицу хранилище...

Перенос значения из одной таблицы в другую, если выполняется условие
всем привет. в Oracle не сильно силен. подскажите, как можно решить подобную задачку. Есть две таблицы, с разным количеством...

Перенос из одной таблицы в другую
Есть таблицы, из одной нужно перенести id в другую. но при этом во второй некоторые из id первой уже есть. Как можно перенести значения из...

13
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
24.10.2013, 11:11
Это что за запрос? Сомневаюсь, что он выполняется хоть в какой-то СУБД.

SQL
1
2
3
INSERT INTO tab2
SELECT *
FROM tab1
0
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
24.10.2013, 16:51  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Это что за запрос? Сомневаюсь, что он выполняется хоть в какой-то СУБД.

SQL
1
2
3
INSERT INTO tab2
SELECT *
FROM tab1
Ваш запрос не будет работать, и данные все потеряются (вижу некомпетентность отправляю читать что такое BLOB. На риторические вопросы не отвечаю (в моем запросе есть как минимум "SELECT", но ценю то что вы отозвались).

Поправленный запрос(форматировал для более удобного чтения):
SQL
1
2
3
SELECT 'INSERT INTO schema2.TABLE(ID, BLOB1, BLOB2) 
VALUES (select max (ID) FROM schema1.table1, ''' || ID || ''', ''' || BLOB1 || ''', BLOB2')
FROM schema2.TABLE

есть таблица1: c полями id, blob1, blob2 типа id, blob, blob, и идентичная ей таблица.
Нужно перенести данные так, чтобы данные из типов blob не потерялись.
Пробовал несколько вариантов:
Первый - клик
Второй - клик

Блобы у меня большие, очень.
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
24.10.2013, 18:32
Цитата Сообщение от vsprog Посмотреть сообщение
Ваш запрос не будет работать, и данные все потеряются (вижу некомпетентность отправляю читать что такое BLOB. На риторические вопросы не отвечаю (в моем запросе есть как минимум "SELECT", но ценю то что вы отозвались).
Запрос будет работать и работает. Покажите ddl таблиц, сам запрос и ошибки, из-за которых он у вас не работает. А вот ваш запрос, в котором blob неявно пытается преобразоваться в строку действительно не айс.
1
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
24.10.2013, 18:55  [ТС]
Цитата Сообщение от KuKu Посмотреть сообщение
Запрос будет работать и работает. Покажите ddl таблиц, сам запрос и ошибки, из-за которых он у вас не работает. А вот ваш запрос, в котором blob неявно пытается преобразоваться в строку действительно не айс.
Тут я прошу прощения за то что упростил, и да преобразование blob в строку, конечно же не айс, там я оставлял "EMPTY_BLOB()". Есть на самом деле есть еще данные в полях, но я их убрал, они должны преобразовываться в строку. Ну думаю вы понимаете что в результирующем запросе они будут, а потом буду пользоваться INSERT. Если что могу подробней. Сама суть в том, что нужно перенести blob данные из одной таблицы, в другую.
Вот структура:
Переход на pastebin
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
24.10.2013, 19:40
Цитата Сообщение от vsprog Посмотреть сообщение
Тут я прошу прощения за то что упростил, и да преобразование blob в строку, конечно же не айс, там я оставлял "EMPTY_BLOB()".
Вы вставляете вместо своего блоба empty_blob и жалуетесь, что вставляются пустые данные? Покажите свой insert select, который не вставляет данные и ошибку, если есть - а то нифига не понятно в чем проблема.
Цитата Сообщение от vsprog Посмотреть сообщение
Сама суть в том, что нужно перенести blob данные из одной таблицы, в другую.
Вам уже писали запрос:
Цитата Сообщение от Grossmeister Посмотреть сообщение
INSERT INTO tab2
SELECT *
FROM tab1
он все нормально переносит
0
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
28.10.2013, 15:34  [ТС]
Цитата Сообщение от KuKu Посмотреть сообщение
Вам уже писали запрос:
SQL
1
2
3
INSERT INTO tab2
SELECT *
FROM tab1
он все нормально переносит
Hello World не подходит, потому что id могут совпадать
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.10.2013, 15:44
Цитата Сообщение от vsprog Посмотреть сообщение
потому что id могут совпадать
Если имеются ввиду id в tab1 и tab2, то есть 2 пути:
1. перечислить нужные поля в tab1 и tab2, чтобы вставлять без id, а формирование id возложить на триггер у целевой таблицы (в данном случае tab2)
2. написать PL/SQL блок, в котором указанный SQL будет в виде курсора и в этом блоке тем или иным способом решать коллизии с id

PS
А причем тут "Hello World"?
1
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
28.10.2013, 16:51  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Если имеются ввиду id в tab1 и tab2, то есть 2 пути:
1. перечислить нужные поля в tab1 и tab2, чтобы вставлять без id, а формирование id возложить на триггер у целевой таблицы (в данном случае tab2)
2. написать PL/SQL блок, в котором указанный SQL будет в виде курсора и в этом блоке тем или иным способом решать коллизии с id

PS
А причем тут "Hello World"?
мне кажется что он просто скопировал из википедии этот запрос и сказал что работает. Сейчас сидел проверял, данные переносятся, но в поле типа BLOB пусто.

Третий способ наверное будет через sequence, для id выставлять nextval. Но у меня он не объявлен.

С id решил проблему так:
SQL
1
SELECT MAX (id) +1 FROM shema1.table1
, table1 - имя таблицы в которую вставляем данные.

Советуют почитать информацию тут, пока вот разбираюсь.

Добавлено через 11 минут
А запрос выполнял такой:
SQL
1
2
3
INSERT INTO SHEMA1.SOMETABLE (ID, BLOBCOLUMN1, BLOBCOLUMN2) 
SELECT (SELECT MAX (ID) + 1 FROM SHEMA1.SOMETABLE), BLOBCOLUMN1, BLOBCOLUMN2 
FROM SHEMA2.SOMETABLE WHERE SOMETABLE.ID = 1
При его выполнении данные из BLOB потерялись и в таблице в которую их вставляли был пустой файл. Может я недостаточно информировал вас, схемы разные.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.10.2013, 17:16
Application Developer’s Guide - Large Objects (LOBs)

Frequently Asked Questions about LOBs

Question
Can I insert or update any length of data for a LOB column? Am I still restricted to 4K. How about LOB attributes
Answer
When inserting or updating a LOB column you are now not restricted to 4K.
For LOB attributes, you must use the following two steps:
1. INSERT empty LOB with the RETURNING clause
2. Call OCILobWrite to write all the data
Т.е. если LOB < 4K, можно использовать приведенный пример.
Если больше, то можешь выполнить п.1, а дальше аналогично след. примеру:

CREATE OR REPLACE PROCEDURE Example_3a
IS
lobd, lobs BLOB;
dest_offset INTEGER := 1
src_offset INTEGER := 1
amt INTEGER := 3000;
BEGIN
SELECT b_col INTO lobd
FROM lob_table
WHERE key_value = 12 FOR UPDATE;

SELECT b_col INTO lobs
FROM lob_table
WHERE key_value = 21;

DBMS_LOB.COPY(lobd, lobs, amt, dest_offset, src_offset);

COMMIT;

EXCEPTION
WHEN some_exception
THEN handle_exception;
END;
1
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
28.10.2013, 17:44  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Т.е. если LOB < 4K, можно использовать приведенный пример.
Если больше, то можешь выполнить п.1, а дальше аналогично след. примеру:
Да, LOB >4K, вышеприведенный пример использовать значит не получится.

Цитата Сообщение от Grossmeister Посмотреть сообщение
Если больше, то можешь выполнить п.1, а дальше аналогично след. примеру
А про какой п.1 ты имеешь пункт ввиду?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
29.10.2013, 09:44
Цитата Сообщение от vsprog Посмотреть сообщение
А про какой п.1 ты имеешь пункт ввиду?
1. INSERT empty LOB with the RETURNING clause
1
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
29.10.2013, 15:04  [ТС]
Запутался, не могу понять смысл dbms_lob.copy() с кучей параметров можно же просто dbms_lob.copy(temp, value)?
У меня получается что всегда привязываюсь к id. Можно ли как-нибудь вытащить строку с данными и одновременно осуществить копирование blob одним запросом?
0
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 10
05.11.2013, 10:29  [ТС]
Получилось сделать спасибо всем кто помог. Тему можно закрыть.
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
SET SERVEROUTPUT ON
DECLARE    
    TYPE arr_type IS TABLE OF VARCHAR2(30)
    INDEX BY BINARY_INTEGER;
    arr arr_type;
    new_id      INTEGER;
    temp_blob1        BLOB;
    temp_blob2        BLOB;
    to_blob1            BLOB;
    to_blob1            BLOB;
    dest_offset        INTEGER := 1;
    src_offset          INTEGER := 1;
    blob1_length      INTEGER;
    blob2_length      INTEGER;
    amount             INTEGER := DBMS_LOB.LOBMAXSIZE;
    length1              INTEGER;
    
BEGIN
    SELECT id BULK COLLECT INTO arr FROM schema2.TABLE;
    DBMS_OUTPUT.put_line('count (id): ' || arr.COUNT);
    FOR I IN 1..arr.COUNT
    LOOP
        SELECT MAX (id) + 1 INTO new_id FROM schema1.TABLE;
        INSERT INTO schema1.TABLE
                    (id, blob1, blob2)
           SELECT (SELECT MAX (id) + 1
                     FROM scema1.TABLE), EMPTY_BLOB (), EMPTY_BLOB ()
             FROM schema2.TABLE
            WHERE id = arr (I);
        
        SELECT blob1 INTO temp_blob1 FROM shema2.TABLE WHERE id = arr(I);
        SELECT blob2 INTO temp_blob2 FROM shema2.TABLE WHERE id = arr(I);
        
        SELECT blob1 INTO to_blob1  FROM shema1.TABLE WHERE id = new_id FOR UPDATE;
        SELECT blob2 INTO to_blob2  FROM shema1.TABLE WHERE id = new_id FOR UPDATE;
    
        IF (temp_blob1 IS NOT NULL) THEN
            DBMS_LOB.COPY(to_blob1, temp_blob1, amount, dest_offset, src_offset);
        END IF;
        
        IF (temp_blob2 IS NOT NULL) THEN
            DBMS_LOB.COPY(to_blob2, temp_blob2, amount, dest_offset, src_offset);
        END IF;
        
        DBMS_OUTPUT.put_line('copying note with Id: '|| arr(I) || '...complete');   
    END LOOP;
    DBMS_OUTPUT.put_line('finished...');
END;
 
COMMIT;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2013, 10:29
Помогаю со студенческими работами здесь

Перенос данных из одной БД в другую
Здравствуйте. Задача, есть БД в mysql из нее выгрузил sql скрипт,все хорошо. Далее есть БД в interbase .FDB, так же успешно скрипт из нее...

Перенос данных из одной таблицы в другую
Здравствуйте уважаемые форумчане! Имеется программа на Delphi позволяющая просматривать базу данных созданную в MS Access. Имеются две...

Перенос данных из одной таблицы в другую
Привет всем, имеется для таблицы, одна - эксель. Подключается через ADOConnection1, вторая DBF, подключается через ADOConnection2. ...

Перенос данных из одной таблицы в другую
День добрый всем. У меня возник вопрос, возможно ли при переносе данных из одной таблицы в другую, чтоб каждый раз, при нажатии...

Перенос данных из одной таблицы в другую
Имеется две таблицы. Необходимо перенести данные из второй таблицы в первую. Помогите, пожалуйста. Может что то не так делаю, но update не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru