Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
Дано.
Есть таблица A с двумя столбцами (Aa и Ab). С данными.
Есть таблица B с одним столбцом (Bc). Пустая.

Требуется.
Произвести вставку данных из A в B таким образом, чтобы каждая десятая (сотая/тысячная) строка брала данные из столбца Ab, а все остальные из столбца Aa.

Сделал через курсор и третий столбец, но наверняка можно сделать триггером (и возможно ещё как-то). Хотелось бы узнать как именно.
Заранее благодарю!

Вот использованный курсор. Точнее два курсора.

declare 
    id B.id%TYPE; -- числа по порядку начиная с 1
    Ba B.Ba%TYPE; 
    Bb B.Bb%TYPE; 
    Bc B.Bc%TYPE; -- пустой столбец
    
    CURSOR B_Cursor IS
        SELECT id, Ba, Bb, Bc 
        FROM B where mod(id, 50)<>0 FOR UPDATE;
    
begin
    OPEN B_Cursor;
    LOOP 
    FETCH B_Cursor INTO id, Ba, Bb, Bc;
    EXIT WHEN B_Cursor%NOTFOUND;
    DELETE FROM B WHERE CURRENT OF B_Cursor;
    INSERT INTO B VALUES(id, Ba, Bb, Ba);
    END LOOP;
    CLOSE B_Cursor;
end;
/


declare 
    id B.id%TYPE; 
    Ba B.Ba%TYPE; 
    Bb B.Bb%TYPE; 
    Bc B.Bc%TYPE; 
    
    CURSOR B_Cursor IS
        SELECT id, Ba, Bb, Bc 
        FROM B where Bc is null FOR UPDATE;
    
begin
    OPEN B_Cursor;
    LOOP 
    FETCH B_Cursor INTO id, Ba, Bb, Bc;
    EXIT WHEN B_Cursor%NOTFOUND;
    DELETE FROM B WHERE CURRENT OF B_Cursor;
    INSERT INTO B VALUES(id, Ba, Bb, Bb);
    END LOOP;
    CLOSE B_Cursor;
end;
/
21 дек 15, 11:50    [18587625]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
роунум
Guest
loky1109
возможно ещё как-то
insert-select
21 дек 15, 11:59    [18587674]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52505
loky1109,
как-то так?
insert into B (Bc)
select CASE
           WHEN MOD(rownum, 1000) = 0 THEN Ab
           ELSE Aa
         END AS Ac
from A

как сюда триггер прикрутить думайте сами, потому что я пока не вижу как вы при вставке в A будете определять какая это запись по счёту
PS лабораторка что ли?
21 дек 15, 12:01    [18587681]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
roadster
loky1109,
как сюда триггер прикрутить думайте сами, потому что я пока не вижу как вы при вставке в A будете определять какая это запись по счёту


Вот так: id B.id%TYPE; -- числа по порядку начиная с 1

roadster
loky1109,
как-то так?
insert into B (Bc)
select CASE
           WHEN MOD(rownum, 1000) = 0 THEN Ab
           ELSE Aa
         END AS Ac
from A


Но вообще как-то удивительно просто. Как говорится, слона-то я и не заметил...

PS лабораторка что ли?

Хуже. Работа. Таблицы до A и B при написании поста обезличил. Так-то они иначе называются, да и столбцов в них поболее, но это всё не касалось вопроса.
21 дек 15, 12:06    [18587714]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52505
loky1109
Вот так: id B.id%TYPE; -- числа по порядку начиная с 1
то есть отсутствие дыр реализовано?
впрочем вам виднее.
21 дек 15, 12:29    [18587862]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
roadster
loky1109
Вот так: id B.id%TYPE; -- числа по порядку начиная с 1
то есть отсутствие дыр реализовано?
впрочем вам виднее.

В смысле "отсутствие дыр"?
21 дек 15, 12:34    [18587889]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
использованный презерватив
Guest
loky1109
Вот использованный курсор
а какое оиношение приведенный код имеет к озвученной задаче.
loky1109
Хуже. Работа.
что кому тр будет от такой работы хуже, это понятно. но неужели за перепечатку заданий sql.ru платят?
21 дек 15, 12:34    [18587890]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1167
loky1109
roadster
пропущено...
то есть отсутствие дыр реализовано?
впрочем вам виднее.

В смысле "отсутствие дыр"?
Да не загоняйся ты. Если ты про дырки в нумерации ничего не знаешь- значит, оно тебе не нужно.
21 дек 15, 12:41    [18587936]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
oragraf
loky1109
пропущено...

В смысле "отсутствие дыр"?
Да не загоняйся ты. Если ты про дырки в нумерации ничего не знаешь- значит, оно тебе не нужно.


А, эти дырки. Эти отсутствуют. id вносится из последовательности, никакие строки после этого не удаляются.
21 дек 15, 12:44    [18587966]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
otvetchik
Guest
loky1109

Вот использованный курсор.
. . .
begin
    OPEN B_Cursor;
    LOOP 
    FETCH B_Cursor INTO id, Ba, Bb, Bc;
    EXIT WHEN B_Cursor%NOTFOUND;
    DELETE FROM B WHERE CURRENT OF B_Cursor;
    INSERT INTO B VALUES(id, Ba, Bb, Ba);
    END LOOP;
    CLOSE B_Cursor;
end;
. . .

Шедевр!
21 дек 15, 12:48    [18588003]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
[quot otvetchik]
loky1109
Шедевр!


Сарказм?
21 дек 15, 12:51    [18588019]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
otvetchik
Guest
loky1109, прости, не удержался.
21 дек 15, 12:56    [18588060]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
otvetchik
loky1109, прости, не удержался.


Добавлю красок.

begin
    OPEN B_Cursor;
    LOOP 
      FETCH B_Cursor INTO id, Ba, Bb, Bc;
      EXIT WHEN B_Cursor%NOTFOUND;
      DELETE FROM B WHERE CURRENT OF B_Cursor;
      INSERT INTO B VALUES(id, Ba, Bb, Ba);
    END LOOP;
    CLOSE B_Cursor;
end;
21 дек 15, 13:06    [18588110]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
mcureenab, наверное тут и впрямь есть что-то смешное.
Мне, однако, это не очевидно.
21 дек 15, 13:42    [18588314]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
mcureenab, отдельно отмечу, что это первый и второй мною написанные курсоры. Это чтоб всё совсем красочно стало.
21 дек 15, 14:15    [18588505]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
otvetchik
Guest
loky1109
о это первый и второй мною написанные курсоры.

Как-то это плохо стыкуется с
loky1109
Хуже. Работа.

От подробного разбора использованных курсоров воздержусь, т.к. там косяк на косяке.
Позабавила подмена update на delete+insert
Первый DML?
21 дек 15, 14:44    [18588762]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
loky1109
mcureenab, наверное тут и впрямь есть что-то смешное.
Мне, однако, это не очевидно.
Привыкай оформлять код в общепринятой манере. А на обиженных воду возят.
21 дек 15, 14:53    [18588837]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
mcureenab
Привыкай оформлять код в общепринятой манере. А на обиженных воду возят.

Никаких обид.
21 дек 15, 15:10    [18588963]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
otvetchik
loky1109
о это первый и второй мною написанные курсоры.

Как-то это плохо стыкуется с
loky1109
Хуже. Работа.


Вот такая работа, что 4 года обходился без курсоров.
И дальше бы обходился, если бы сам себе не придумал.
Первые два года и вообще без SQL обходился.

От подробного разбора использованных курсоров воздержусь, т.к. там косяк на косяке.

Но при этом работает же. И результат даже тот, на который я рассчитывал.

Позабавила подмена update на delete+insert

Хм... И впрямь забавно.

Первый DML?

*осторожный уточняющий вопрос* "Первый DML" что?
21 дек 15, 15:19    [18589058]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28038
loky1109
Вот такая работа, что 4 года обходился без курсоров.
И дальше бы обходился, если бы сам себе не придумал.
Первые два года и вообще без SQL обходился.
Менеджеру по клинингу это вообще никогда не понадобится. Переквалифицируйся - жить станет проще.
21 дек 15, 15:29    [18589152]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
Elic
Менеджеру по клинингу это вообще никогда не понадобится. Переквалифицируйся - жить станет проще.

Прошу указать мне, где я говорил, что упрощение является моей целью? Или, что считаю низкую потребность в знаниях и умениях плюсом моей работы?
21 дек 15, 15:39    [18589225]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52505
loky1109
А, эти дырки. Эти отсутствуют. id вносится из последовательности, никакие строки после этого не удаляются.
хорошо.
что такое транзакция вам известно?
как работают последовательности вам известно?
что будет, если выскочит эксепшен при вставке в B?
21 дек 15, 15:44    [18589268]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
roadster
loky1109
А, эти дырки. Эти отсутствуют. id вносится из последовательности, никакие строки после этого не удаляются.
хорошо.
что такое транзакция вам известно?
как работают последовательности вам известно?
что будет, если выскочит эксепшен при вставке в B?


Да, три раза.
21 дек 15, 15:55    [18589352]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52505
loky1109
Да, три раза.
что три раза?
дырки же будут.
тогда непонятно условие "каждые n записей, потому как его при таком подходе сложно соблюсти.
21 дек 15, 16:03    [18589413]     Ответить | Цитировать Сообщить модератору
 Re: Вставка с выбором.  [new]
loky1109
Member

Откуда:
Сообщений: 48
roadster
loky1109
Да, три раза.
что три раза?
дырки же будут.
тогда непонятно условие "каждые n записей, потому как его при таком подходе сложно соблюсти.


id выдаётся при создании таблицы A, а там вставка безусловная.
21 дек 15, 16:15    [18589518]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить