powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Откат вложенных транзакций при ошибке ASE
13 сообщений из 13, страница 1 из 1
Откат вложенных транзакций при ошибке ASE
    #36887663
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Adaptive Server Enterprise/15.0.2/EBF

Хочется в случае ошибки откатить не всю транзакию, а вложенную транзакцию до savepoint.
Однако происходит откат до самого первого коммита. Даже print ничего не выводит.

Имеем :

Код: plaintext
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.
create table #TEST
(
   ID  int  not null
)
go

create proc p_TEST
as
begin

   declare @retvalue int, @error int, @tran_opened smallint, @ret_val int

   if @@trancount =  0 
   begin
         begin transaction p_test_tran
         set @tran_opened =  0 
   end
   else
   begin
   	  begin transaction p_test_tran
          save transaction savepoint_0
          set @tran_opened =  1 
   end

   print '@tran_opened is %1!', @tran_opened

  insert into #TEST  values ( 12 )
  select @error = @@error
  if @error !=  0  goto on_error

  exec @ret_val = p_TEST1
  if @error !=  0  or isnull(@ret_val,  0 ) =  0  goto on_error

  commit transaction p_test_tran

   return  1 

  on_error:

  rollback transaction savepoint_0
  commit transaction p_test_tran

   return - 1 
end
go


create proc p_TEST1
as
begin

   declare @retvalue int, @error int, @tran_opened smallint

   if @@trancount =  0 
   begin
        begin transaction p_test_tran_1
        set @tran_opened =  0 
   end
   else
   begin
   	begin transaction p_test_tran_1
        save transaction savepoint_1
        set @tran_opened =  1 
   end

   print '@tran_opened is %1!', @tran_opened

   insert into #TEST  values ( 14 )
   select @error = @@error
   if @error !=  0  goto on_error
  --Имитация ошибки
  select  1 / 0 
  select @error = @@error
  if @error !=  0  goto on_error

   commit transaction p_test_tran_1

   return  1 

  on_error:

   print 'Error'

  rollback transaction savepoint_1
  commit transaction p_test_tran_1

   return - 1 
end
go

delete #TEST

exec p_TEST

select * from #TEST




После exec p_TEST

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
------------------------ Execute ------------------------
@tran_opened is  0 
@tran_opened is  1 
Divide by zero occurred.
( 1  rows affected)
return status = - 6 
----------------- Done ( 1 errors ) ------------------

После
Код: plaintext
select * from #TEST
Пусто. Хотя должно быть значение 12, если бы откат был бы к точке сохранения.
И print 'Error' не происходит.
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36887755
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри за повторение. Были тормоза с форумом и я думал, что сообщение не ушло. Просьба модераторам подредактировать моё первое сообщение.

Модератор: Что повторилось ? Что редактировать ? Может быть лучше ты повторишь пост в нормальном виде, а этот удалим ?
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36888423
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD,

I don't think you can catch that error at all, Likewise divide-by-zero. Likewise arithmetic overflow, but at least these can be constrained with SET ARITHABORT ... and SET ARITHIGNORE ...
It will abort sp immediately, then implicit rollback I think -> empty table.
Try something else.

Regarding begin tran, save tran: no need to have different names for tran and savepoint:
I think the best template is (something like below example):

Код: plaintext
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.
...
select @tran_count = @@trancount           -- 01.26.07 EK    - Added to avoid 266 err.messages
if @tran_count =  0                                   -- 01.26.07 EK    - Transaction has not begun
    begin tran pop_accounts_rollup_upd       -- 01.26.07 EK    - Begin tran increments tran.nest level to 1
else                                                      -- 03.08.05 EK    - Added to avoid 6401,266 err.messages
    save  tran pop_accounts_rollup_upd       -- 01.26.07 EK    - Already in transaction 
...

--
-- Commit/return gracefully              -- 03.31.05 EK - Added error handler processing
--
  if @tran_count =  0                        -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 errs.
      commit tran pop_accounts_rollup_upd
  select @rc = @OK
  return (@rc)
...

  --
  -- Handle/return errors                                    -- 03.31.05 EK - Added error handler processing
  --
syb_err:
  rollback tran   pop_accounts_rollup_upd             -- 01.26.07 EK - Rollback to savepoint, or begin tran
--commit   tran                                               -- 01.26.07 EK - Commented out -- 03.08.05 EK - Added empty commit for @@trancount decr.(otherwise 266 err)
  raiserror  22100  @error_message, @sp_name, @table_name, @account_number, @syb_err
  select @rc = @NOT_OK
  return (@rc)

For checking after delete/upd/insert stmt:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
--
-- Check error and qty of deleted/inserted/updated  rows         -- 03.31.05 EK  - Added error handler processing
--
  select
      @syb_err           = @@error,
      @affected_rows  = @@rowcount,
      @tran_state       = @@transtate                    -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
  if (@syb_err != @OK or @tran_state >= @PREV_STMT_ABORTED) goto syb_err    --  01 . 26 . 07  EK - Added @@transtate to avoid  6401 ,  266  err.messages

For checking after sp execution:
Код: plaintext
1.
2.
3.
4.
5.
exec @rc = b_uc_acc_name_bus_group @account_number, @ccy_uc      -- 03.05.08 EK - Added separate sp b_uc_acc_name_bus_group
    select                                                   -- 01.29.07 EK - Added error handler processing
      @syb_err    = @@error,                         -- 01.29.07 EK - Added check return code and error (sometimes @rc=0, but @@error != 0)
      @tran_state = @@transtate                   -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
    if (@rc != @OK or @syb_err != @OK or @tran_state >= @PREV_STMT_ABORTED) goto syb_err    -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36888425
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry, formatting and color gone ...
Модератор: Just whistle
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36888884
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже ответили на сообщение, удаление приведёт к удалению и ответа тоже увы. Глюк был в том, что я в одном посте продублировал своё сообщение несколько раз. Я сообщение отправлял, а браузер писал ошибку и так по новой пару раз.

Модератор: Дублей сообщений я не вижу, но если ты в эту ветку запостишь ещё одно сообщение, которое должно представлять первое сообщение в нормальном виде, я смогу заменить содержимое первого сообщения на содержимое нового, а новое удалю.

Спасибо за улучшеный шаблончик.

ZhoraI don't think you can catch that error at all, Likewise divide-by-zero. Likewise arithmetic overflow, but at least these can be constrained with SET ARITHABORT ... and SET ARITHIGNORE ...
It will abort sp immediately, then implicit rollback I think -> empty table.
Try something else.

Это поможет, но не во всех случаях.
Я пробовал имитировать ошибку и так :
Код: plaintext
1.
2.
3.
4.
5.
6.
 select convert(datetime, '2003123')   
  select @error = @@error 
  if @error !=  0  
  begin
     print 'Error !1%',@error
     goto on_error
  end

Тоже откатило всё, а вот вставка в not null column null значения действительно откатилась так как надо. Видать severity level таких ошибок sybase считает настолько серьёзным, что откатывает всё не зависимо от моего анализа ошибок.

Код: plaintext
@tran_state >= @PREV_STMT_ABORTED

@PREV_STMT_ABORTED - имеется ввиду @tran_state
2 Statement aborted: the previous statement was aborted; no effect on the transaction.

Ещё
Код: plaintext
1.
2.
3.
4.
5.
declare @sp_name varchar( 30 ), @t2 varchar( 30 ), @account_number varchar( 30 ), @syb_err varchar( 30 ), @table_name varchar( 30 ), @error_message varchar( 30 )

set @table_name = 'tname', @sp_name = 'sp_name',  @account_number = 'account_number', @syb_err = 'syb_err', @error_message = '@error_message'

raiserror  22100  @error_message, @sp_name, @table_name, @account_number, @syb_err

Выводит :
Код: plaintext
1.
2.
3.
4.
------------------------ Execute ------------------------
( 1  rows affected)
@error_message
----------------- Done ( 1 errors ) ------------------

Нужно так :

Код: plaintext
1.
raiserror  22100  '%1! %2! %3! %4! %5!', @error_message, @sp_name, @table_name, @account_number, @syb_err
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36888988
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD
Я пробовал имитировать ошибку и так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 select convert(datetime, '2003123')   
  select @error = @@error 
  if @error !=  0  
  begin
     print 'Error !1%',@error
     goto on_error
  end



Это как раз тот же случай, что и Женя говорил. Обламывается в ctcommon и процесс
выполнения запроса просто убивается вместе с транзакцией. TSQL при этом не
получает управление вообще.

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

Ты можешь проверить будет ли эффект, поместив невалидный оператор в один батч с ещё каким-то
опреатором типа select 'error detected' , идущим за ним. Если получишь на клиенте 'error detected',
то всё ОК, а если нет -- ошибка обламывает весь батч.

Кстати странно, что ты изначально напоролся именно на эти самые грабли. Вообще очень плохо, что в ASE до сих пор эти проблемы не устаканили.
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36890665
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Вообще очень плохо, что в ASE до сих пор эти проблемы не устаканили.

Совершенно согласен с Ильей. Даже описания обработки ошибок приличного нет.
Когда Я делал стандарты кодирования процедур для своей бывшей маленькой фирмы
(собственно самого себя , теперь (в большой) приходится использовать другие стандарты ),
то перечитал/браузил массу всякой литературы и в основном использовал книгу (the best one !)
http://www.amazon.com/Sybase-SQL-Server-11-Unleashed/dp/0672309092
и 2 (уже почти 3) статьи по MSSQL (!) ( http://www.sommarskog.se/error-handling-I.html )
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36890698
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD

Нужно так :

Код: plaintext
1.
raiserror  22100  '%1! %2! %3! %4! %5!', @error_message, @sp_name, @table_name, @account_number, @syb_err


Ну чтобы понятнее было (извините за длину неохота разбираться, один подбный пример их есть у меня сотни )
Код: plaintext
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.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
CREATE PROCEDURE dbo.build_start_rollup_ccy_from_to
/******************************************************************************/
/* Name               : build_start_rollup_ccy_from_to                        */
/* Desc/Purpose       : Populate rpt's table 'start_rollup_ccy_from_to'       */
/* Usage              : exec [@rc = ] build_start_rollup_ccy_from_to          */
/* Input parameters   : @account_number                                       */
/* Output parameters  : None                                                  */
/* Assumptions        : - Deadlock situation covered in VB or/and SOD         */
/* Return code        : 0-Success, 1-Failed                                   */
/* Calling procedures : Many + directly from VB module                        */
/* Called  procedures : build_fxtates_euro                                    */
/* Input Tables/Views : accounts_profile (T), start_all_ccy_from_to (V)       */
/* Output Tables/Views: start_rollup_ccy_from_to                              */
/* Business function  : Prepare rollup ccy table for rpts for input account   */
/* Implementation     : - Delete rows from table for input account            */
/*                    : - Insert grouped rows from input tables to rpt's table*/
/* Created by         : <The Firm Name>                                       */
/* Version            : 1.3                                                   */
/* Created            : 03.28.01 - EK                                         */
/* Last modified      : 04.08.08 - EK                                         */
/* Revision history   : 1.3 - 04.08.08 EK - Modified tran./err. handler       */
/*                    : 1.2 - 03.18.05 EK - "or" repl. by "union" for perform.*/
/*                    :                   - Added tran./err.handler+header    */
/*                    : 1.0 - 03.28.01 EK - Initial version (clone from today)*/
/******************************************************************************/
(
    @account_number char( 9 ) --,
--    @rollup_ccy     char(3)
)
as
--WITH RECOMPILE

--
--  Declare 'system' constants
--
  declare
    @YES                                char( 1 ),        -- Yes = "Y"
    @NO                                 char( 1 ),        -- No  = "N"
    @OK                                 int,            -- Success
    @NOT_OK                             int,            -- Failed
    @PREV_STMT_ABORTED                  int             -- Previous stmt aborted, transaction still in progress

--
--  Declare 'application' constants
--
   declare
    @FOUND_EURO_CONV_RATES_REC_FXR      int,            --0 03.27.08 EK - Added: everything is OK
    @NOT_FOUND_EURO_CONV_RATES          int,            --1 No converter from euro currencies to euro
    @NOT_FOUND_EURO_REC_FXRATES         int             --2 "EUR" record is missing in start_fxrates table

--
--  Declare  'system' variables
--
  declare
    @rc                                 int,            -- Return code
    @syb_err                            int,            -- Sybase error
    @tran_count                         int,            -- Nesting level of transaction          -- 01.26.07 EK - Added
    @tran_state                         int,            -- The state of the current transaction  -- 01.26.07 EK - Added
    @affected_rows                      int,            -- Rows affected by DML stmt
    @sp_name                            varchar( 32 ),    -- Name of current storage procedure
    @table_name                         varchar( 32 ),    -- Name of table
    @error_message                      varchar( 120 ),   -- Error message produced by error handler
    @success_message                    varchar( 120 )    -- Success message produced by error handler

--
--  Declare 'application' variables
--
  declare
    @rollup_ccy                         char( 3 )         -- Rollup ("ZZZ") currency of account

--
-- Initialize 'system' constants
--
  select
    @YES                = "Y",
    @NO                 = "N",
    @OK                 =  0 ,
    @NOT_OK             =  1 ,
    @PREV_STMT_ABORTED  =  2                              -- 01.26.07 EK - Added

--
--  Initialize 'application' constants
--
 select
    @FOUND_EURO_CONV_RATES_REC_FXR =  0 ,                 -- 03.27.08 EK - Added
    @NOT_FOUND_EURO_CONV_RATES     =  1 ,
    @NOT_FOUND_EURO_REC_FXRATES    =  2 

--
--  Initialize 'system' variables
--
  select
    @rc               = @OK,
    @syb_err          =  0 ,
    @tran_count       =  0 ,                              -- 01.26.07 EK - Added
    @tran_state       =  0 ,                              -- 01.26.07 EK - Added
    @affected_rows    =  0 ,
    @error_message    = "Rollback transaction data: Stored Procedure: %1!, Table: %2!, Account: %3!, Sybase error: %4!",
    @success_message  = "Commit transaction data: Stored Procedure: %1!, Table: %2!, Account: %3!, Rows affected: %4!",
    @sp_name          = "build_start_rollup_ccy_from_to",     -- object_name(@@procid),
    @table_name       = "start_rollup_ccy_from_to"            -- substring(@sp_name, 7, char_length(@sp_name)-7)

--
--  Initialize 'application' variables
--

--
--  Handle transaction
--
--/*begin transaction */                              -- 02.26.08 EK- Deleted/Replaced by below lines

--set transaction isolation level 3                   -- 03.07.05 TS/EK - Prevents dupl.key err. for RLL/DPL
    select @tran_count = @@trancount                  -- 01.26.07 EK - Added to avoid 266 err.messages
    if @tran_count =  0                                 -- 01.26.07 EK - Transaction has not begun
      begin tran pop_start_rollup_ccy_from_to         -- 01.26.07 EK - Begin tran increments tran.nest level to 1   -- 03.08.05 EK - Added to avoid 6401,266 err.messages
    else                                              -- 01.26.07 EK - Already in transaction
      save  tran pop_start_rollup_ccy_from_to         -- 01.26.07 EK - Save tran does not increment tran.nest level -- 03.08.05 EK in case of regular ROLLBACK stmt

--
-- Get rollup currency for account
--
    select @rollup_ccy = ap.rollup_ccy                --(03.17.05 EK - Maybe better to separate in upper sp?)
    from   accounts_profile ap                        --(03.17.05 EK - So far did not see difference in showplan)
    where  ap.account_number = @account_number

--
--  Populate start_fxrates with euro ccys
--
    exec @rc = build_start_fxrates_euro
    select                                                                                  -- 01.29.07 EK - Added error handler processing
      @syb_err    = @@error,                                                                -- 01.29.07 EK - Added check return code and error (sometimes @rc=0, but @@error != 0)
      @tran_state = @@transtate                                                             -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
--  if (@rc != @OK or @syb_err != @OK or @tran_state >= @PREV_STMT_ABORTED) goto syb_err    -- 03.27.08 EK - Deleted/Modified by below line 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
    if (@syb_err != @OK or @tran_state >= @PREV_STMT_ABORTED) goto syb_err                  -- 03.27.08 EK - Added: @rc is keeping output parameter/should be replaced by output parm.

--
-- Populate 'start_rollup_ccy_from_to'
--
    delete
    from   start_rollup_ccy_from_to
    where  account_number = @account_number
    select                                                                  -- 03.31.05 EK - Added error handler processing
      @syb_err           = @@error,                                         -- 03.31.05 EK - Added check error and
      @affected_rows     = @@rowcount,                                      -- 03.31.05 EK - Added qty of del/ins/upd rows
      @tran_state        = @@transtate                                      -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
    if (@syb_err != @OK or @tran_state >= @PREV_STMT_ABORTED) goto syb_err  -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages

--  if (@rc = @OK or @rc = @NOT_FOUND_EURO_CONV_RATES)                      -- 03.27.08 EK - Deleted/Replaced by below lines --07.27.00 EK - Added euro ccys not found proc.
    if (@rc = @FOUND_EURO_CONV_RATES_REC_FXR or                             -- 03.27.08 EK - Added
        @rc = @NOT_FOUND_EURO_CONV_RATES)                                   -- 03.27.08 EK - Added
      /***********************************************/
      /* ccy_to_usa -> rollup_ccy                    */
      /* rollup_ccy -> ccy_to_usa                    */
      /***********************************************/
      insert into start_rollup_ccy_from_to
        (
          account_number,
          ccy_code_from,
          ccy_code_to,
          mult_conv_rate_from_to
        )
      /***********************************************/
      /* ccy_from_all -> ccy_to_all                  */
      /***********************************************/
      select @account_number, u.*
      from   start_all_ccy_from_to u
      where  u.ccy_code_from = @rollup_ccy  --or             -- 03.16.05 EK - Modified: "or" replaced
      union                                                  -- 03.16.05 EK - Added   :  by "union" for performance reason
      select @account_number, u.*                            -- 03.16.05 EK - Added
      from   start_all_ccy_from_to u                         -- 03.16.05 EK - Added
      where  u.ccy_code_to   = @rollup_ccy                   -- 03.16.05 EK - Added

    else if (@rc = @NOT_FOUND_EURO_REC_FXRATES)
      /***********************************************/
      /* ccy_to_usa -> rollup_ccy,                   */
      /* rollup_ccy -> ccy_to_usa                    */
      /***********************************************/
      insert into start_rollup_ccy_from_to
        (
          account_number,
          ccy_code_from,
          ccy_code_to,
          mult_conv_rate_from_to
        )
      /***********************************************/
      /* ccy_to_usa -> ccy_to_all                    */
      /***********************************************/
      select @account_number, u.*
      from   start_all_ccy_from_to u
      where  u.ccy_code_from not in
             (select ccy_code from euro_conv_rates where ccy_code != "EUR") and
             u.ccy_code_to not in
             (select ccy_code from euro_conv_rates where ccy_code != "EUR") and
             (u.ccy_code_from = @rollup_ccy )
             --or u.ccy_code_to = @rollup_ccy)                                  -- 03.16.05 EK - Deleted/Replaced by below lines: "or" replaced
      union                                                                     -- 03.16.05 EK - Added: by "union" for performance reason
      select @account_number, u.*                                               -- 03.16.05 EK - Added
      from   start_all_ccy_from_to u                                            -- 03.16.05 EK - Added
      where  u.ccy_code_from not in                                             -- 03.16.05 EK - Added
             (select ccy_code from euro_conv_rates where ccy_code != "EUR") and -- 03.16.05 EK - Added
             u.ccy_code_to not in                                               -- 03.16.05 EK - Added
             (select ccy_code from euro_conv_rates where ccy_code != "EUR") and -- 03.16.05 EK - Added
           --(u.ccy_code_from = @rollup_ccy )                                   -- 03.16.05 EK - Deleted: "or" replaced by "union" for perf.reason
             (u.ccy_code_to = @rollup_ccy)                                        -- 03.16.05 EK - Added
    else /* We have @rc = syb.err from build_start_fxrates_euro */              -- 03.27.08 EK - Added
      goto syb_err                                                              -- 03.27.08 EK - Added

    select                                                                  -- 03.31.05 EK - Added error handler processing
      @syb_err           = @@error,                                         -- 03.31.05 EK - Added check error and
      @affected_rows     = @@rowcount,                                      -- 03.31.05 EK - Added qty of del/ins/upd rows
      @tran_state        = @@transtate                                      -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
    if (@syb_err != @OK or @tran_state >= @PREV_STMT_ABORTED) goto syb_err  -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages

--/*commit transaction */                                         -- 03.26.08 EK - Deleted/Replaced by below lines
--
-- Commit/return gracefully                                       -- 03.31.05 EK - Added error handler processing
--
    if @tran_count =  0                                             -- 01.26.07 EK - Added @@transtate to avoid 6401, 266 err.messages
      commit tran pop_start_rollup_ccy_from_to                    -- 01.26.07 EK - This proc issued begin tran => commit tran to decrement @@trancount to 0
                                                                  -- 01.26.07 EK - Commit not required with save tran
--  set transaction isolation level 1
    select @rc = @OK
--  print @success_message, @sp_name, @table_name, @account_number, @affected_rows
    return (@rc)

--
-- Handle/return errors
--
syb_err:                                                            -- 03.31.05 EK - Added error handler processing
    rollback tran pop_start_rollup_ccy_from_to                      -- 01.26.07 EK - Added rollback to savepoint, or begin tran
--  commit   tran                                                   -- 01.26.07 EK - Commented out -- 03.08.05 EK - Added empty commit for @@trancount decr.(otherwise 266 err)
    raiserror  22100  @error_message, @sp_name, @table_name, @account_number,  @syb_err
--  set transaction isolation level 1
    select @rc = @NOT_OK
    return (@rc)

go
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36890903
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora, стиль оформления текста вашей ХП чем делаете, руками или через какую-то тулзу прогоняете?
Просто так руками форматить наверное быстро надоест.
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36890976
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да все ручками и табомб а там копируй да все
(да надобы модератору вырезать середину, а то ешо пришьют шпионаж какой
да и не по теме там да и @rc в этом примере неудачно ипользуется - обычно я только 0 или 1 -
Success, Fail пользовал). Сейчас правда использую (так требуют) - SQLBrowser (Очень оригинальная штука) - там форматирование - одной клавишей (да и в DBARTISAN - тоже), но мне результат не нравится может можно настроть но я чего то не нахожу как мне бы хотелось, к тому же требуют все эти правые "Added, Deleted ..." - убирать, мол SVN пользуем (может оно и правильно, просто я еще с "ассемблерных IBM 360 времен" привык к ясному колоночнму формату и комментариям на каждой строке - правда более осмысленным. Надо бы конечно иметь хорошие template, вроде в PL/SQL Oracle
(в новой редакции /настройке/project SQL Develpora by Steven Feuerstein) - есть такое, может и в TSQL MSSQL - но я не в курсе или плохо смотрел)
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36891031
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora
да и не по теме там да и @rc в этом примере неудачно ипользуется - обычно я только 0 или 1 -

+ стараюсь не писать DML вместе c execami в одной sp
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36891041
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora wrote:

> Success, Fail пользовал). Сейчас правда использую (так требуют) -
> SQLBrowser (Очень оригинальная штука)

Он жив ещё ? Сколько стоит ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Откат вложенных транзакций при ошибке ASE
    #36893630
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Я не знаю. Может это Open Source. See http://www.sqlbrowser.com.
Во всяком случае для нашей фирмы вроде бесплатно.
Его автор у нас работает
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Откат вложенных транзакций при ошибке ASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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