powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов двух процедур в одной транзакции.
25 сообщений из 44, страница 1 из 2
Вызов двух процедур в одной транзакции.
    #39762322
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть вопрос. Мне нужно вызвать две процедуры в одной транзакции. Вызываем сначала процедуру А() и если она отработала успешно вызвать процедуру В() и если она отработало тоже нормально выполнить коммит, а если нет то вернуть ошибку.
В общем нужно вызвать А() затем В() и после успешного завершения обоих выполнить COMMIT. Как это провернуть.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762326
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019,

Concepts
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762331
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Как это провернуть.Это задача для послеясельной группы детсада. Т.е. сперва надо отмотать срок в яслях.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762347
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  A; -- до "B;", а уж тем более до "COMMIT;" не дойдет, если "A;" выбросит EXCEPTION
  B;

  COMMIT;
END;
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762348
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
Код: plsql
1.
  PRAGMA AUTONOMOUS_TRANSACTION;

Зачем?
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762349
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я понимая что легко. Но первый раз с этим вообще работаю. Хот пример какой-то может кто-то даст.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762352
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019пример какой-то может кто-то даст.RTFM Subprogram Invocations (FAQ)
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762354
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

ElicКроик Семён
Код: plsql
1.
  PRAGMA AUTONOMOUS_TRANSACTION;


Зачем?

Помедитировал над вопросом и подумал, что автору нужно закоммитить A и B и только это, не влияя на вызывающую сессию
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762356
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семённе влияя на вызывающую сессиюИзмышлизмЪ.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762357
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Мне нужно вызвать две процедуры в одной транзакции. Вызываем сначала процедуру А() и если
она отработала успешно вызвать процедуру В() и если она отработало тоже нормально
выполнить коммит, а если нет то вернуть ошибку.
В общем нужно вызвать А() затем В() и после успешного завершения обоих выполнить COMMIT.
Как это провернуть.

Именно так и проворачивай: стартуй транзакцию, вызывай процедуры, в конце коммит. В чём
проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762360
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Вызываем сначала процедуру А() и если она отработала успешно вызвать процедуру В() и если она отработало тоже нормальноRTFM Statement-Level Atomicity (FAQ)
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762363
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Нужно вызвать А() она вернет код ошибки, если он ОК, то вызвать В() и если код тоже ОК то совершить транзакцию. Если любая из них
выдала код НЕ_ОК, то отка.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762367
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Нужно вызвать А() она вернет код ошибки, если он ОК, то вызвать В() и если код тоже ОК то
совершить транзакцию. Если любая из них
выдала код НЕ_ОК, то отка.

Ну так в чём проблема-то?
Код: plaintext
1.
if (A() == HE_OK || B() == HE_OK) rollback(); else commit();


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762369
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlex2019Нужно вызвать А() она вернет Ну так в чём проблема-то?Alex2019процедуру А()
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762371
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, Т.е. Я так понял.?
DECLARE
error number;
BEGIN
A(error);
if error <> 0 then rollback;
B(error);
if error <> 0 then rollback;
COMMIT;
END;
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762380
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Я так понял.?

Нет, это бред. Вернись на курсы для начинающих программистов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762383
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
create table dropme_t(id number, action varchar2(50));
Table created
insert into dropme_t values(1,'Initial');
1 row inserted

commit;
Commit complete

create or replace procedure dropme_a(i_param varchar2 default null) as
begin
  insert into dropme_t values(2,'Inserted by a()');
  if initcap(i_param) like 'Explode' then raise invalid_number; end if;
  update dropme_t set action = action||' Updated by a()';
end;
/
Procedure created
sho err

No errors for PROCEDURE DEVELOPER.DROPME_A
create or replace procedure dropme_b(i_param varchar2 default null) as
begin
  insert into dropme_t values(3,'Inserted by b()');
  update dropme_t set action = action||' Updated by b()' where mod(id,2)=1;
end;
/
Procedure created
sho err
No errors for PROCEDURE DEVELOPER.DROPME_B

select * from dropme_t;
        ID ACTION
---------- --------------------------------------------------
         1 Initial

-- Successive run
begin
  insert into dropme_t values(4,'Inserted by Caller');
  dropme_a();
  dropme_b();
end;
/
PL/SQL procedure successfully completed

select * from dropme_t order by id;
        ID ACTION
---------- --------------------------------------------------
         1 Initial Updated by a() Updated by b()
         2 Inserted by a() Updated by a()
         3 Inserted by b() Updated by b()
         4 Inserted by Caller Updated by a()

rollback;
Rollback complete

select * from dropme_t;
        ID ACTION
---------- --------------------------------------------------
         1 Initial

-- Inconsistent exception handling
begin
  insert into dropme_t values(4,'Inserted by Caller');
--  savepoint s1;
  dropme_a('explode');
  dropme_b();
exception
  when invalid_number then null;
--  when invalid_number then rollback to savepoint s1;
end;
/
PL/SQL procedure successfully completed

select * from dropme_t order by id;
        ID ACTION
---------- --------------------------------------------------
         1 Initial
         2 Inserted by a()
         4 Inserted by Caller

rollback;
Rollback complete

select * from dropme_t;
        ID ACTION
---------- --------------------------------------------------
         1 Initial

-- Correct run
begin
  insert into dropme_t values(4,'Inserted by Caller');
  savepoint s1;
  dropme_a('explode');
  dropme_b();
exception
  when invalid_number then rollback to savepoint s1;
end;
/
PL/SQL procedure successfully completed

select * from dropme_t order by id;
        ID ACTION
---------- --------------------------------------------------
         1 Initial
         4 Inserted by Caller

SQL> 
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762412
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

В коня ли корм?
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762419
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Добрый день. Есть вопрос. Мне нужно вызвать две процедуры в одной транзакции. Вызываем сначала процедуру А() и если она отработала успешно вызвать процедуру В() и если она отработало тоже нормально выполнить коммит, а если нет то вернуть ошибку.
В общем нужно вызвать А() затем В() и после успешного завершения обоих выполнить COMMIT. Как это провернуть.

Вы хотите сказать, что код PL/SQL, по-умолчанию, работает синхронно?
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762430
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rf_mailВы хотите сказать, что код PL/SQL, по-умолчанию, работает синхронно?Формулировка недоумевает варианты ответа: синхронно, асинхронно. Причем это переключается неким по-умолчанием.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762435
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-rf_mailВы хотите сказать, что код PL/SQL, по-умолчанию, работает синхронно?Формулировка недоумевает варианты ответа: синхронно, асинхронно. Причем это переключается неким по-умолчанием.
на этот вопрос советую ответ

begin
А();
В();
COMMIT;
end;
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762438
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rf_mail,

PS SQL работаю пару дней, так что на такие вопросы я ответить не могу.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762449
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019SQL работаю пару днейЗаходи через пару лет. Может за 100 понедельников что-нибудь, да освоишь.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762452
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-Alex2019SQL работаю пару днейЗаходи через пару лет. Может за 100 понедельников что-нибудь, да освоишь.
Ок. Постараюсь освоить.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762454
AserYZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rf_mail-2-пропущено...
Формулировка недоумевает варианты ответа: синхронно, асинхронно. Причем это переключается неким по-умолчанием.
на этот вопрос советую ответ

begin
А();
В();
COMMIT;
end;

Это если где-то в A() какой-то умник не поставил.

WHEN OTHERS THEN NULL

Автор, я бы уточнил бы критерий " успешного завершения обоих".
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов двух процедур в одной транзакции.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]