Question

The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.

Asked by: carolastra

I have a Java program in WebLogic, the database is Sybase.

When the Java program run a stored procedure return the error:

com.sybase.jdbc2.jdbc.SybSQLException: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-03-20 at 16:08:49ID21781670
Tags

allowed

,

within

,

command

,

transaction

,

multi-statement

Topic

Sybase Database

Participating Experts
1
Points
125
Comments
3

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. TempDb
    I am having a problem with the tempdb. It fills up (60 Meg) in about 6 hours with approx. 25 people using the SQL server. Is this normal? What do I have to do to correct this? I have been shutting the server off and restarting, this seems to take care of the problem. Is there...
  2. tempdb
    I am using SQL 6.5 and when i try to query the database using a COM componenet continuously for 15-20 minutes then I get the following error: [Microsoft][ODBC SQL Server Driver][SQL Server]Unable to allocate new page for database 'tempdb'. There are no more pages available o...
  3. tempdb question / transaction log
    why do we need a transaction log or logsegment for tempdb?? All the objects in tempdb are flushed during a server recycle so why do we need a transaction log?? A transaction log records updates/deletes/inserts right? but since we are not recovering tempdb why do we need it? ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: Joe_WoodhousePosted on 2006-03-21 at 03:58:52ID: 16246051

It would be helpful if we could see the code, and know what product (Sybase makes three databases) and version...?

But if this is ASE (any version), then run this as someone with DBA (sa_role) permissions:

use master
go
sp_dboption tempdb, "allow ddl in tran", true
go
use tempdb
go
checkpoint
go

 

by: carolastraPosted on 2006-03-22 at 10:38:14ID: 16260358

The version for Sybase is ASE 12.5.3, DBA told me this opcion is dangerous because if a transaction is dead lock is impossible kill it and the only solucion is re-start the server.

My code:

create proc dbo.sps_saldo_consulta_ad2
@as_usuario varchar(10),
@ai_tipo integer,
@ai_nombres integer = null,
@ai_consoli integer = null
 
AS
declare
@ls_usuario   varchar(20),
@ls_parametro varchar(255),
@ls_sucursal  varchar(3),
@ls_moneda    varchar(2),
@ls_mayor     varchar(3),
@ls_analitico varchar(15),
@ls_futuro    varchar(10),
@ls_pasado    varchar(10),
 
@li_sucursal  integer,
@li_mayor     integer,
@ldt_futuro   datetime,
@ldt_pasado   datetime,
@ls_oficina   varchar(255),
@ldt_switch   datetime,
@ld_minimo    numeric(20,4),
@ld_maximo    numeric(20,4),
@ld_switch    numeric(20,4),
@ls_minimo    varchar(22),
@ls_maximo    varchar(22),
@ls_cuenta    varchar(18)
 
DECLARE
@ldt_inicio                   datetime,
@ldt_fin                                   datetime,
@ln_registros    double precision
 
 
begin
 
            select @ldt_inicio = getdate()
            select @ls_usuario = @as_usuario,       --Obtiene el nombre del usuario
                                    @ls_oficina = space(255)
/*          execute ctrlcontable.dbo.sps_oficina_usuario 2, @ls_usuario, @ls_oficina output
            select @ls_oficina = rtrim(@ls_oficina)
 
print "permisos en oficina '%1!'", @ls_oficina
*/
                                            
/*if exists (select 1 from OFICINA WHERE (charindex(","+ofi_identificador+",",@ls_oficina) <>0 ) and ofi_privilegio = 'N')
begin*/
            select @ls_oficina = '*' --Oficina Privilegiada
--end
 
                        create table #SALDO_RESULTADO                                                    
                        (fecha    datetime,
                         sucursal int,
                         moneda   char(2),
                         mayor    int,
                         analitico varchar(15),
                         naturaleza int ,                                                                                                     
                         cargo    numeric(20,4),
                         abono    numeric(20,4),
                         saldo    numeric(20,4),
                         nombre   varchar(60) NUll
                        )
 
                        SELECT con_parametro
      INTO   #CONSULTA_USUARIO
                        FROM CONSULTA
                        WHERE usu_identificador = @ls_usuario
                        AND  con_tipo = @ai_tipo
                        ORDER BY con_subconsulta
 
           
            DECLARE SIG_CONSULTA CURSOR FOR                   --Cursor que extrae las consultas definidas para un tipo y un usuario
                        SELECT con_parametro
                        FROM #CONSULTA_USUARIO
 
            OPEN SIG_CONSULTA
 
            FETCH SIG_CONSULTA
            INTO     @ls_parametro
 
 
            WHILE @@sqlstatus = 0
                        BEGIN
 
                                     IF @ai_tipo = 1                                                                              
                                               begin
                                                           select @ls_sucursal  = substring(@ls_parametro,1,3),
                                                                                   @ls_moneda    = substring(@ls_parametro,4,2),
                                                                                   @ls_mayor     = substring(@ls_parametro,6,3),
                                                                                   @ls_analitico = substring(@ls_parametro,9,15),
                                                                                   @ls_futuro    = substring(@ls_parametro,24,10),
                                                                                   @ls_pasado    = substring(@ls_parametro,34,10)
 
 
 
                                                                                                                                    
                                                           if rtrim(@ls_sucursal) in ( null,'')
                                                                       select @li_sucursal = -1
                                                           else
                                                                       select @li_sucursal = convert(integer,@ls_sucursal)
 
                                                           select @ls_moneda = rtrim(@ls_moneda), @li_mayor = convert(integer, @ls_mayor)
 
                                                           if @ls_pasado = @ls_futuro select @ls_futuro = ''
 
                                                                                                                                      
                                                                       if rtrim(@ls_pasado) in ( null,'')  and rtrim(@ls_futuro) in ( null,'')
                                                                                  begin                                   
                       
                                                                                                          execute dbo.sps_saldo_rec_cue_hoy
                                                                                                                                                                     @li_sucursal , @ls_moneda    ,
                                                                                                                                                                     @li_mayor    , @ls_analitico ,
                                                                                                                                                                     @ls_oficina  
                                                                                  end
                                                    else  if rtrim(@ls_pasado) in ( null,'') and rtrim(@ls_futuro) not in ( null,'')
                                                                                  begin                                 
                                                                                                          select @ldt_futuro = convert(datetime,@ls_futuro)
--print "consulta de fecha '%1!' --> '%2!'  --> '%3!'  --> '%4!' --> '%5!' --> '%6!'", @ldt_futuro,
--                                                                                                                                                                   @li_sucursal  , @ls_moneda    ,
--                                                                                                                                                                   @li_mayor     , @ls_analitico ,
--                                                                                                                                                                   @ls_oficina  
                                                                                                          execute dbo.sps_saldo_rec_cue_fecha
                                                                                                                                                                     @ldt_futuro   ,
                                                                                                                                                                     @li_sucursal  , @ls_moneda    ,
                                                                                                                                                                     @li_mayor     , @ls_analitico ,
                                                                                                                                                                     @ls_oficina  
                                                                                  end
                                                    else  if rtrim(@ls_pasado) not in ( null,'') and rtrim(@ls_futuro) in ( null,'')
                                                                                  begin                                  
 
 
                                                                                                          select @ldt_pasado = convert(datetime,@ls_pasado)
                                                                                                          execute dbo.sps_saldo_rec_cue_fecha
                                                                                                                                                                     @ldt_pasado   ,
                                                                                                                                                                     @li_sucursal  , @ls_moneda    ,
                                                                                                                                                                     @li_mayor     , @ls_analitico ,
                                                                                                                                                                     @ls_oficina  
                                                                                  end
                                                    else  if rtrim(@ls_pasado) not in ( null,'') and rtrim(@ls_futuro) not in ( null,'')
                                                                                  begin                                 
 
                                                                                                          select @ldt_futuro = convert(datetime,@ls_futuro)
                                                                                                          select @ldt_pasado = convert(datetime,@ls_pasado)
                                                                                                          if @ldt_pasado > @ldt_futuro                                               
                                                                                                                      begin
                                                                                                                                 select @ldt_switch = @ldt_pasado
                                                                                                                                 select @ldt_pasado = @ldt_futuro
                                                                                                                                 select @ldt_futuro = @ldt_switch
                                                                                                                      end
                                                                                                          execute dbo.sps_saldo_rec_cue_perio
                                                                                                                                                                     @ldt_futuro   ,@ldt_pasado   ,
                                                                                                                                                                     @li_sucursal  ,@ls_moneda    ,
                                                                                                                                                                     @li_mayor     ,@ls_analitico ,
                                                                                                                                                                     @ls_oficina 
                                                                                  end
                                               end
                        ELSE IF @ai_tipo = 2                                                                                                
                                               begin
                                                           select @ls_sucursal  = substring(@ls_parametro,1,3),
                                                                                   @ls_futuro    = substring(@ls_parametro,4,10),
                                                                                   @ls_pasado    = substring(@ls_parametro,14,10)
 
                                                                                               
                                                           if rtrim(@ls_sucursal) in ( null,'') select @li_sucursal = -1
                                                           else select @li_sucursal = convert(integer,@ls_sucursal)
                                                           if rtrim(@ls_pasado) = rtrim(@ls_futuro) select @ls_futuro=''
 
                                                                                                                                  
                                                                       if rtrim(@ls_pasado) in ( null,'')  and rtrim(@ls_futuro) not in ( null,'')
                                                                                  begin                                   
                                                                                                          execute dbo.sps_saldo_rec_cue_hoy
                                                                                                                                                                     @li_sucursal , "",
                                                                                                                                                                     0, "%",@ls_oficina  
 
                                                                                  end
                                                    else  if rtrim(@ls_pasado) in ( null,'') and rtrim(@ls_futuro) not in ( null,'')
                                                                                  begin                                 
                                                                                                          select @ldt_futuro = convert(datetime,@ls_futuro)
                                                                                                          execute dbo.sps_saldo_rec_cue_fecha
                                                                                                                                                                     @ldt_futuro   ,
                                                                                                                                                                     @li_sucursal  , "",
                                                                                                                                                                     0, "%",
                                                                                                                                                                     @ls_oficina  
                                                                                  end
                                                    else  if rtrim(@ls_pasado) not in  ( null,'') and rtrim(@ls_futuro) in ( null,'')
                                                                                  begin                                 
                                                                                                          select @ldt_pasado = convert(datetime,@ls_pasado)
                                                                                                          execute dbo.sps_saldo_rec_cue_fecha
                                                                                                                                                                     @ldt_pasado   ,
                                                                                                                                                                     @li_sucursal  , "",
                                                                                                                                                                     0, "%",
                                                                                                                                                                     @ls_oficina  
                                                                                  end
                                                    else  if rtrim(@ls_pasado) not in ( null,'') and rtrim(@ls_futuro) not in ( null,'')
                                                                                  begin                                 
                                                                                                          select @ldt_futuro = convert(datetime,@ls_futuro)
                                                                                                          select @ldt_pasado = convert(datetime,@ls_pasado)
                                                                                                          if @ldt_pasado > @ldt_futuro                                               
                                                                                                                      begin
                                                                                                                                 select @ldt_switch = @ldt_pasado
                                                                                                                                 select @ldt_pasado = @ldt_futuro
                                                                                                                                 select @ldt_futuro = @ldt_switch
                                                                                                                      end
                                                                                                          execute dbo.sps_saldo_rec_cue_perio
                                                                                                                                                                     @ldt_futuro   ,@ldt_pasado   ,
                                                                                                                                                                     @li_sucursal  ,"",
                                                                                                                                                                     0,"",
                                                                                                                                                                     @ls_oficina 
                                                                                  end
 
 
                                               end
                        ELSE IF @ai_tipo = 3                                                                                    
                                               begin
                                                           select @ls_cuenta    = rtrim(substring(@ls_parametro,1,18)),
                                                                                   @ls_minimo    = rtrim(substring(@ls_parametro,19,22)),
                                                                                   @ls_maximo    = rtrim(substring(@ls_parametro,41,22)),
                                                                                   @ls_futuro    = rtrim(substring(@ls_parametro,63,10)),
                                                                                   @ls_pasado    = rtrim(substring(@ls_parametro,73,10))
 
--print "pasado  '%1!'   futuro  '%2!' ",@ls_pasado, @ls_futuro
 
                                                                                    
                                                                                   if @ls_minimo = null select @ld_minimo = 0
                                                                                   else select                 @ld_minimo = convert(decimal(20,4),@ls_minimo)
 
                                                                                   if @ls_maximo = null select @ld_maximo = 0
                                                                                   else select                 @ld_maximo = convert(decimal(20,4),@ls_maximo)
 
                                                                                   if @ld_minimo > @ld_maximo                                                     
                                                                                   begin
                                                                                                          select @ld_switch = @ld_minimo
                                                                                                          select @ld_minimo = @ld_maximo
                                                                                                          select @ld_maximo = @ld_switch
                                                                                   end
                                                                                  if rtrim(@ls_pasado) = rtrim(@ls_futuro) select @ls_futuro=''
--print "pasado  '%1!'   futuro  '%2!' ",@ls_pasado, @ls_futuro
--print "maximo  '%1!'   '%2!'",@ld_maximo,@ld_minimo
                                                                                                                                      
                                                                       if (@ls_pasado in ( null,'') and @ls_futuro in ( null,''))
                                                                                  begin                                   
                                                                                                          execute dbo.sps_saldo_cya_imp_hoy
                                                                                                                                             @ls_cuenta    ,@ld_minimo    ,
                                                                                                                                             @ld_maximo    ,@ls_oficina  
                                                                                  end
                                                    else  if (@ls_pasado in ( null,'') and @ls_futuro not in ( null,''))
                                                                                  begin                                 
                                                                                                          select @ldt_futuro = convert(datetime,@ls_futuro)
                                                                                                          execute dbo.sps_saldo_rec_imp_fecha
                                                                                                                                             @ls_cuenta     ,
                                                                                                                                             @ld_minimo     ,@ld_maximo    ,
                                                                                                                                             @ldt_futuro    ,@ls_oficina  
                                                                                  end
                                                    else  if (@ls_pasado not in ( null,'') and @ls_futuro in ( null,''))
                                                                                  begin                                 
                                                                                                          select @ldt_pasado = convert(datetime,@ls_pasado)
--print "-->pasado  '%1!'   futuro  '%2!' ",@ls_pasado, @ls_futuro
                                                                                                          execute dbo.sps_saldo_rec_imp_fecha
                                                                                                                                             @ls_cuenta     ,
                                                                                                                                             @ld_minimo     ,@ld_maximo    ,
                                                                                                                                             @ldt_pasado    ,@ls_oficina  
                                                                                  end
                                                    else  if (@ls_pasado not in ( null,'') and @ls_futuro not in ( null,''))
                                                                                  begin                                 
                                                                                                          select @ldt_futuro = convert(datetime,@ls_futuro)
                                                                                                          select @ldt_pasado = convert(datetime,@ls_pasado)
                                                                                                          if @ldt_pasado > @ldt_futuro                                               
                                                                                                                      begin
                                                                                                                                 select @ldt_switch = @ldt_pasado
                                                                                                                                 select @ldt_pasado = @ldt_futuro
                                                                                                                                 select @ldt_futuro = @ldt_switch
                                                                                                                      end
--print "periodo de fechas"
                                                                                                          execute dbo.sps_saldo_cya_imp_perio
                                                                                                                                                         @ls_cuenta    ,@ld_minimo    ,@ld_maximo    ,
                                                                                                                                                         @ldt_pasado   ,@ldt_futuro   ,@ls_oficina  
                                                                                  end
 
 
                                               end
 
            ELSE IF @ai_tipo = 17                                                                            
                                               begin
                                                           select @ls_sucursal  = substring(@ls_parametro,1,3),
                                                                                   @ls_moneda    = substring(@ls_parametro,4,2),
                                                                                   @ls_mayor     = substring(@ls_parametro,6,3),
                                                                                   @ls_analitico = substring(@ls_parametro,9,15),
                                                                                   @ls_futuro    = substring(@ls_parametro,24,10)
 
 
                                                                                                                                    
                                                           if rtrim(@ls_sucursal) in ( null,'')
                                                                       select @li_sucursal = -1
                                                           else
                                                                       select @li_sucursal = convert(integer,@ls_sucursal)
 
                                                           select @ls_moneda = rtrim(@ls_moneda),
                                                                                   @li_mayor  = convert(integer, @ls_mayor)
                                                           select @ldt_futuro = convert(datetime,@ls_futuro)
 
                                                           execute dbo.sps_afecta_rec_cue_fecha
                                                                                                                      @ldt_futuro   ,
                                                                                                                      @li_sucursal  , @ls_moneda    ,
                                                                                                                      @li_mayor     , @ls_analitico ,
                                                                                                                      @ls_oficina  
 
                                               end
 
 
                                                                    
                                   FETCH SIG_CONSULTA
                                   INTO     @ls_parametro
 
                        END
 
 
                                                                                                                     
            exito:
 
 
                        if @ai_nombres = 1 execute dbo.sps_saldo_nombres @ai_tipo
 
                        create table #NOREPETIDOS                                                    
                                               (fecha    datetime,
                                                sucursal int null,
                                                moneda   char(2),
                                                mayor    int,
                                                analitico varchar(15),
                                                naturaleza int,
                                                cargo    numeric(20,4),
                                                abono    numeric(20,4),
                                                saldo    numeric(20,4),
                                                nombre   varchar(60) NUll
                                               )
 
                                                                                                          
 
                        if @ai_consoli = 1                       
                                   begin
                                              
                                   IF @ai_tipo = 17
                                                           INSERT INTO #NOREPETIDOS                                                    
                                                                       (fecha, sucursal, moneda, mayor, analitico, naturaleza, cargo, abono, saldo, nombre)
                                                           select  distinct fecha,    NULL,    moneda   ,                   mayor    ,                    analitico ,
                                                                                               MAX(naturaleza) ,         SUM(cargo)    ,                        SUM(abono)    ,            SUM(saldo)    ,            MAX(nombre   )
                                                                       from #NOREPETIDOS
                                                                       GROUP BY fecha      ,  moneda   ,                   mayor    ,                    analitico
                                                                       order by mayor, fecha,  moneda,   analitico
                                               Else
                                                           INSERT INTO #NOREPETIDOS                                                    
                                                                       (fecha, sucursal, moneda, mayor, analitico, naturaleza, cargo, abono, saldo, nombre)
                                                           select  distinct fecha      ,          0     ,    moneda   ,                   mayor    ,                     analitico ,
                                                                                               MAX(naturaleza) ,         SUM(cargo)    ,                        SUM(abono)    ,            SUM(saldo)    ,            MAX(nombre   )
                                                           from #SALDO_RESULTADO
                                                           GROUP BY fecha      ,  moneda   ,                   mayor    ,                    analitico
                                                           order by mayor, fecha,  moneda,   analitico
 
                                                                                           
            IF @ai_tipo = 17
                                                           BEGIN
                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                       select 
                                                                                               fecha      ,        sucursal     ,     moneda   ,                   mayor    ,                       analitico ,
                                                                                               naturaleza ,      cargo    ,                     abono    ,                     saldo    ,                      nombre  
                                                                       from #NOREPETIDOS
                                                                       order by mayor, fecha,  moneda,   analitico
                                                           END
                                               ELSE
                                                           BEGIN
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                       select 
                                                                                               fecha      ,        sucursal     ,     moneda   ,                   mayor    ,                       analitico ,
                                                                                               naturaleza ,      cargo    ,                     abono    ,                     saldo    ,                      nombre
                                                                       from #NOREPETIDOS
                                                                       order by fecha      ,         moneda   ,                   mayor    ,                    analitico
                                                           END
 
                                               DROP TABLE #NOREPETIDOS
                                   END
                        else                                                                                  
                                                                                           
          IF @ai_tipo = 17
                                                           BEGIN
                                                                       select  Distinct
                                                                                               fecha      ,        sucursal ,         moneda   ,                   mayor    ,                       analitico ,
                                                                                               naturaleza ,      cargo    ,                     abono    ,                     saldo    ,                      nombre  
                                                                       from #SALDO_RESULTADO
                                                                       order by  mayor   ,  fecha   ,       sucursal ,         moneda   ,         analitico
                                                           END
                                               ELSE
                                                           BEGIN
                                                                       create table #NOREPETIDOS2                                                    
                                               (fecha    datetime,
                                                sucursal int null,
                                                moneda   char(2),
                                                mayor    int,
                                                analitico varchar(15),
                                                naturaleza int,
                                                cargo    numeric(20,4),
                                                abono    numeric(20,4),
                                                saldo    numeric(20,4),
                                                nombre   varchar(60) NUll
                                               )
                                                                       INSERT INTO #NOREPETIDOS2                                                    
                                                                       (fecha, sucursal, moneda, mayor, analitico, naturaleza, cargo, abono, saldo, nombre)
                                                                       select  Distinct
                                                                                               fecha      ,        isnull(sucursal,0) ,         moneda   ,                   mayor    ,                    analitico ,
                                                                                               naturaleza ,      cargo    ,                     abono    ,                     saldo    ,                      nombre  
                                                                       from #SALDO_RESULTADO
                                                                       order by fecha      ,        sucursal ,         moneda   ,                   mayor    ,                        analitico
 
                                                          
 
                                                                       select  Distinct
                                                                                               fecha      ,        sucursal ,         moneda   ,                   mayor    ,                       analitico ,
                                                                                               naturaleza ,      cargo    ,                     abono    ,                     saldo    ,                      nombre  
                                                                       from #NOREPETIDOS2
                                                                       order by fecha      ,        sucursal ,         moneda   ,                   mayor    ,                        analitico
 
                                                           END
 
 
                        select @ln_registros = @@rowcount
                        select @ldt_fin = getdate()
                        execute dbo.spi_bitacora
                        @ldt_inicio                   ,
                        @ldt_fin                                   ,
                        @ls_usuario                 ,
                        @ai_tipo                                  ,
                        @ln_registros   
 
                       
            error:
 
 
 
            salir:
                        CLOSE SIG_CONSULTA
                        DEALLOCATE CURSOR SIG_CONSULTA
                        drop table #SALDO_RESULTADO
                        drop table #CONSULTA_USUARIO
end

 

by: Joe_WoodhousePosted on 2006-03-22 at 22:43:44ID: 16266255

> DBA told me this option is dangerous because if a transaction is dead lock is impossible kill it and the only solucion is re-start the server.

Uh, I have no idea why your DBA would have said that. As written it is 100% wrong.

If a transaction gets deadlocked, ASE automatically finds a deadlock victim based on whoever has done the least work so far. The "ddl in tran" option does not change this.

If a process is sleeping, any attempt to kill it (whether by the system in the case of a deadlock or manually by a DBA) will only work when it next wakes up. If it never wakes up (hung?) then indeed the only solution is to restart ASE... *but* again, the "ddl in tran" option does not change this.

A quick look in the manuals confirms this. "ddl in tran" does not make any deadlock situation more difficult to handle.

What it *can* do (and this is why it is disabled by default) is to cause more locks on system tables, which are held for the duration of your transaction. If your transaction is "long" (hard to define but 5 minutes is definitely long) then blocking system table access is a lot more intrusive. So it can need some attention to transaction design to make sure those locks are released as soon as possible. Also, don't enable this in tempdb as problems with locked system tables in tempdb can pretty much halt the server - maybe this was what your DBA was thinking of?

Still, in fast transactions outside tempdb, this option is not dangerous and is fine to use.

That being said there are an awful lot of "exciting opportunities for improvement" in your code, but that's beyond the scope of this question (and would need a new question raised)... but very very briefly: don't use cursors, and avoid local variables (and use procedure parameters plus calls to subprocedures) where possible.

SUMMARY: the database option "ddl in tran" is the answer to your problem.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...