Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Откат вложенных транзакций при ошибке ASE / 13 сообщений из 13, страница 1 из 1
07.10.2010, 17:01
    #36887663
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
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
07.10.2010, 17:31
    #36887755
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
Сорри за повторение. Были тормоза с форумом и я думал, что сообщение не ушло. Просьба модераторам подредактировать моё первое сообщение.

Модератор: Что повторилось ? Что редактировать ? Может быть лучше ты повторишь пост в нормальном виде, а этот удалим ?
...
Рейтинг: 0 / 0
08.10.2010, 07:57
    #36888423
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
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
08.10.2010, 07:59
    #36888425
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
Sorry, formatting and color gone ...
Модератор: Just whistle
...
Рейтинг: 0 / 0
08.10.2010, 11:54
    #36888884
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
Уже ответили на сообщение, удаление приведёт к удалению и ответа тоже увы. Глюк был в том, что я в одном посте продублировал своё сообщение несколько раз. Я сообщение отправлял, а браузер писал ошибку и так по новой пару раз.

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

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

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
08.10.2010, 12:23
    #36888988
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
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
09.10.2010, 09:18
    #36890665
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
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
09.10.2010, 10:21
    #36890698
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
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
09.10.2010, 16:33
    #36890903
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
Zhora, стиль оформления текста вашей ХП чем делаете, руками или через какую-то тулзу прогоняете?
Просто так руками форматить наверное быстро надоест.
...
Рейтинг: 0 / 0
09.10.2010, 18:23
    #36890976
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
Да все ручками и табомб а там копируй да все
(да надобы модератору вырезать середину, а то ешо пришьют шпионаж какой
да и не по теме там да и @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
09.10.2010, 19:54
    #36891031
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат вложенных транзакций при ошибке ASE
Zhora
да и не по теме там да и @rc в этом примере неудачно ипользуется - обычно я только 0 или 1 -

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

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

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

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


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