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

Откуда:
Сообщений: 25
Приветствую!)
Имею несколько вопросов. Во-первых про массовую вставку в таблицу.
Например у меня есть таблица TEST (столбцы: V1, V2, V3)и мне нужно отправить туда 4 строки данных. вот пример который я вычитал с адаптацией на мои данные
+

INSERT all
into tst (V1, V2, V3) values ('qqqqq', 'wwwwww', 'eeeeee')
into tst (V1, V2, V3) values ('rrrrrr', 'tttttt', 'yyyyyy')
SELECT * FROM DUAL

вопрос в том, что я не понимаю для чего здесь оператор SELECT? можно как то без него обойтись?

И вопросик в транзакции в oracle. когда работаю с T-SQL там все просто и очевидно
BEGIN TRANSACTION
INSERT INTO TEST(V1, V2, V3) 
		VALUES (N'1',N'aaaaa',N'vvvvv'),
			   (N'2',N'aaaaa',N'vvvvv'),
			   (N'3',N'aaaaa',N'vvvvv');
GO
INSERT INTO TEST(V1, V2, V3) 
		VALUES (N'11',N'qqqqqqq',N'rrrrrrrr'),
			   (N'22',N'qqqqqqq',N'rrrrrrrr'),
			   (N'33',N'qqqqqqq',N'rrrrrrrr');
GO
INSERT INTO TEST(V1, V2, V3) 
		VALUES (N'11',N'qqqqqqq',N'rrrrrrrr','dsdsd'),  -- здесь заведомо допущенная ошибка для проверки работы отката транзакции
			   (N'22',N'qqqqqqq',N'rrrrrrrr','dsdsd'),
			   (N'33',N'qqqqqqq',N'rrrrrrrr','dsdsd');
GO
IF @@ERROR = 0
COMMIT 
ELSE ROLLBACK


Вопрос вот в чем, здесь по коду, если ошибок нет (@@ERROR = 0), то он утверждает изменения в таблице, иначе откат.
Можно ли как то тоже самое реализовать в транзакции на Oracle? Есть какой - то аналог переменной @@ERROR?
Буду признателен за помощь)
26 июн 13, 09:30    [14483904]     Ответить | Цитировать Сообщить модератору
 Re: Transaction и массовый INSERT  [new]
Вадиман
Member

Откуда: Владивосток
Сообщений: 1072
Himu
вопрос в том, что я не понимаю для чего здесь оператор SELECT? можно как то без него обойтись?

Вы же сами тему создали с названием "массовый инсерт". В таблицу вставляются те данные, которые выбираются оператором select. Выберется 5 строк - вставится 5 строк.

Himu
Вопрос вот в чем, здесь по коду, если ошибок нет (@@ERROR = 0), то он утверждает изменения в таблице, иначе откат.
Можно ли как то тоже самое реализовать в транзакции на Oracle? Есть какой - то аналог переменной @@ERROR?
Буду признателен за помощь)

Если возникла ошибка - значит, была исключительная ситуация (exception), который можно перехватывать и как-то обрабатывать.

DECLARE
  x VARCHAR2(1);
BEGIN
  SELECT dummy
  INTO   x
  FROM   dual
  WHERE  1 = 0;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.put_line('Код ошибки: ' || SQLCODE);
END;
26 июн 13, 09:39    [14483933]     Ответить | Цитировать Сообщить модератору
 Re: Transaction и массовый INSERT  [new]
Himu
Member

Откуда:
Сообщений: 25
автор
Вы же сами тему создали с названием "массовый инсерт". В таблицу вставляются те данные, которые выбираются оператором select. Выберется 5 строк - вставится 5 строк.

Т.е. массовая вставка происходит только при выборке?
А если я беру строки вообще из другой БД (из MSSQL)? Т.е. у меня получается есть массив какой то, который я перебираю и данные вставляю? При таком раскладе придется полностью писать insert'ы?

INSERT INTO test VALUES ('qqq','ssss','rrr');
26 июн 13, 09:44    [14483956]     Ответить | Цитировать Сообщить модератору
 Re: Transaction и массовый INSERT  [new]
JaRo
Member

Откуда:
Сообщений: 1659
Ну и из другой БД можно брать селектом, а если именно массивы, то надо смотреть на FORALL (ну или опять же через insert select - зависит от ситуации).

PS: Вот честно, Вам будет ну очень сложно выучить язык исключительно по форуму. Ну хотя бы основы имеет смысл почитать.
26 июн 13, 09:51    [14483998]     Ответить | Цитировать Сообщить модератору
 Re: Transaction и массовый INSERT  [new]
Изя Кацман
Member

Откуда: Великий Эксперимент
Сообщений: 2019
Камрад Himu,
Настраиваешь Heterogenous Service через ODBC на твой любимый MS SQL
С точки зрения Оракла - ето будет Database Link, например с именем MY_LOVELY_MSSQL
Потом в Оракле делаешь
INSERT INTO TEST(V1, V2, V3)
SELECT col1, col2, col3 FROM my_ms_tab@MY_LOVELY_MSSQL;
26 июн 13, 10:02    [14484070]     Ответить | Цитировать Сообщить модератору
 Re: Transaction и массовый INSERT  [new]
в мс так все не просто и неочеви
Guest
Muhi
вот пример который я вычитал
стоит учитывать, что, за исключением официальных источников, где мотивация продавцов способствует потребностям пользователей, в интернете публикуют свои частные открытия в основном люди малочитающие или больные на голову или ради прикола, потому что в прод такой говнокод не пустишь, а излить очень хочется.
26 июн 13, 10:30    [14484280]     Ответить | Цитировать Сообщить модератору
 Re: Transaction и массовый INSERT  [new]
Himu
Member

Откуда:
Сообщений: 25
Благодарю!)
26 июн 13, 10:35    [14484319]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить