2016-04-11 2 views
0

Есть ли способ зафиксировать только данные, вставленные/обновленные в таблице через ссылку базы данных, и не данные текущей сессии? Или они считаются одними и теми же?Oracle PLSQL - ссылка только для базы данных Commit only

Например:

INSERT INTO main_database.main_table(value1, value2) 
VALUES (1 , 2) 

INSERT INTO [email protected]_link(value3, value4) 
VALUES (3 , 4) 

И сделать коммит только для таблицы ссылок базы данных?

Основание на том, почему я хотел бы это сделать: Основная база данных - для (нескольких) записей, а ссылка на базу данных - для (денежных) транзакций (обрабатываемых на отдельном сервере). Я хочу сначала обновить записи, чтобы проверить, не сработает ли какое-либо из ограничений, но не зафиксировать данные до завершения транзакции. Если транзакция завершилась неудачно, я хочу отменить записи, чтобы сохранить усилия по удалению/отмене вложений/обновлений, которые могут стать беспорядочными.

Я предполагаю, что нет, но я надеюсь, что есть способ. Заранее спасибо.

+0

В чем заключен контекст? Вы можете создать точку сохранения между двумя операторами, откат к точке сохранения и затем совершить. Но это предполагает, что перед первым утверждением нет незафиксированных операторов и что вы можете аккуратно разделить две нити работы. Кроме того, если вы знаете, что всегда хотите совершить удаленные изменения, было бы разумнее просто выдать явное коммит после первого оператора. –

+0

В принципе, ответ - нет. Но я изо всех сил пытаюсь понять, для чего вы хотели бы это сделать. Не могли бы вы дать нам немного больше информации, пожалуйста? –

+0

Я обновил свой вопрос. – Mocking

ответ

1
create or replace procedure proc_1 (i IN number) 
as 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    INSERT INTO [email protected]_sid (id, description) 
    VALUES (i, 'Description for ' || i); 
    COMMIT; 
END; 
/

create or replace procedure proc_base (i IN number) 
as 
begin 
    insert into local_tab (id) values (i); 
    proc_1(i); 
    rollback; 
end; 
/
+0

Это сработало для меня. Огромное спасибо. – Mocking

0

No.

Если вставка находится в PL/SQL, то вы можете запустить первую вставку в автономной транзакции, но при отсутствии других функциональных возможностей, что мало отличается от вставки ....; совершить; вставка ...

+0

Прошу прощения, это в PLSQL. Не могли бы вы привести пример автономной транзакции? – Mocking

+0

Я разместил образец pl/sql ниже, который может сработать для вас, попробуйте его –

Смежные вопросы