powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов двух процедур в одной транзакции.
19 сообщений из 44, страница 2 из 2
Вызов двух процедур в одной транзакции.
    #39762468
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AserYZ,

A(errCode);
если код ошибки 0, то продолжаем
В(errCode) если и здесь все ок errCode = 0, то коммит и вернуть errCode.
**************
A(errCode);
если код ошибки -1, rollback, и вернуть код ошибки. т.е. -1)
В() не вызываем.
************************
A(errCode);
если код ошибки 0, то продолжаем
В(errCode) если errCode = -1, то rollback, и вернуть код ошибки. т.е. -1.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762470
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AserYZЭто если где-то в A() какой-то умник не поставил.
WHEN OTHERS THEN NULL
Пусть процедура содержит секцию обработки исключительных ситуаций и завершается без exception.
Это означает, что процедура завершилась УСПЕШНО, что бы это ни значило.
Если при этом результат выполнения процедуры не соответствует ТЗ, то такая проблема решается багрепортом с последующим багфиксом указанной процедуры.
Не дело вызывающего кода контролировать корректность вызываемых методов.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762473
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019если код ошибки -1, rollback
Сразу два недочета.
- интерфейс, основанный на анализе кода ошибок, ведет к многословному и плохо читаемому, замусоренному однотипными конструкциями коду.
- выполнять rollback или commit внутри процедуры - моветон. Препятствует переиспользованию кода и снижает сопровождаемость. Как сделать rollback правильно - я показал.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762513
AserYZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПусть процедура содержит секцию обработки исключительных ситуаций и завершается без exception.
Это означает, что процедура завершилась УСПЕШНО, что бы это ни значило.


У автора, как оказалось, другое мнение, он расчитывает на RC. Отчасти такая реализация тоже имеет место. Наример, комбинация входных параметров A() неправильная. Причем RC=-1 и RC=-2 могут означать две различных ситуации с последующей реакцией в вызывающем коде. Оракл не стесняется использовать RC :)

Задача была простая - вызвать 2 процедуры последовательно в одной транзакции с анализом RC.

Для начала я бы их переделал в функции, раз уж RC, либо параметры INOUT прописал бы с последующим анализом в вызывающем коде.

С чем безоговорочно согласен, так это с тем, что коммитить/ролбечить транзакции нужно на уровне бизнес логики (в общем случае) а не на уровне БД.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762522
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AserYZ, Да вы правы, но увы есть пакет, в нем 2 процедуры, и ТЗ в одной транзакции выполнить их, и после успешного завершения обоих выполнить коммит.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762524
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019ТЗ в одной транзакции выполнить их, и после успешного завершения обоих выполнить коммит.

Так это тебе не сюда, а в раздел, посвящённый языку программирования в курсе которого эта
лабораторная. Ибо управление транзакциями идёт из клиентского приложения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762525
Alex2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Выполнить именно на PL SQL.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762528
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2019Выполнить именно на PL SQL.

Тогда читай PL/SQL User Guide and Reference начиная с "COMMIT Statement".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762539
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён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
Вызов двух процедур в одной транзакции.
    #39762567
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнКроик Семён[src plsql]
PRAGMA AUTONOMOUS_TRANSACTION;

я же утром еще запостил
Семен, заканчивайте уже плостить ерунду по утрам :)
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762622
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousСемен, заканчивайте уже плостить ерунду по утрам :)Ручник, он и в африке ручник :|
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762710
DKbru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
Код: plsql
1.
  if initcap(i_param) like 'Explode' 


Без использования групповых символов или escape like тут явно неуместный оператор, разве нет?
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762933
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DKbrulike тут явно неуместный оператор, разве нет?
По мне так это "явно неуместное замечание".
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762976
DKbru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
В таком случае, прошу Вас меня искренне извинить, просто Ваши посты читаю, как мантру и стараюсь почерпнуть для себя что-то новое. А иногда в жизни даже на самые простые вещи бывает порой самое неожиданное объяснение. Поэтому я решил уточнить, может тут есть скрытый смысл, который мне, в силу ограниченного мышления, постичь не дано.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762992
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DKbruнеожиданное объяснениеЕсли сравниваешь строковое и числовое поле на равенство, like написать короче, чем to_char()=.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39762998
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DKbruпосты читаю, как мантру
Вот это зря.
Не сотвори себе кумира (с)

DKbru и стараюсь почерпнуть для себя что-то новое.

Применительно к вопросу -
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> explain plan for select dummy from dual where dummy like 'X';
Explained

SQL> select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 4017058736
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("DUMMY"='X')
13 rows selected

SQL> 



Применительно к неуместности замечания - в данной ветке это вопрос, не имеющий отношения к обсуждаемой проблеме, или оффтопик.
И не просто оффтопик, а попытка увести обсуждение в дальние дали.

...вот как-то так.
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39763043
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    LIKE

        Оптимизатор  упрощает  условия,  содержащие  оператор  сравнения
        LIKE, в эквивалентное  условие, использующее оператор  равенства
        (если это возможно).   Например, оптимизатор заменяет  первое из
        двух следующих условий на второе:

        ename LIKE 'SMITH'

        ename = 'SMITH'


интересно на что он еще может заменить?
напр a like '123%' substr(a,1,3)='123'?

.....
stax
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39763046
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxинтересно на что он еще может заменить?
напр a like '123%' substr(a,1,3)='123'?

.....
stax
Это как раз врядли потому как по like умеет index range scan а по substr не умеет (на обычном b-tree)

Regards

Maxim
...
Рейтинг: 0 / 0
Вызов двух процедур в одной транзакции.
    #39763047
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim DemenkoStaxинтересно на что он еще может заменить?
напр a like '123%' substr(a,1,3)='123'?

.....
stax
Это как раз врядли потому как по like умеет index range scan а по substr не умеет (на обычном b-tree)

Regards

Maxim
я ето (like умеет index range scan) знаю, и поетому активно пользовался substr

уточним - поле неиндексировано

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


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