¿Cómo puedo encontrar un procedimiento almacenado en una base de datos de Sybase dada una cadena de texto que aparece en algún lugar en el proceso? Quiero ver si cualquier otro proceso en el db tiene una lógica similar a la que yo estoy mirando, y creo que tengo bastante única cadena de búsqueda (literal)

Edición:

Estoy usando Sybase versión 11.2

OriginalEl autor Oskar | 2008-10-30

6 Comentarios

  1. 15

    Dos variaciones sobre Graeme la respuesta (esto no funciona en 11.2):

    Esta lista el nombre del procedimiento almacenado demasiado, pero volverá varias filas para cada procedimiento almacenado si el texto aparece varias veces:

    select object_name(id),* from syscomments 
       where texttype = 0 and text like '%whatever%'

    Esta es una lista cada procedimiento almacenado sólo una vez:

    select distinct object_name(id) from syscomments 
       where texttype = 0 and text like '%whatever%'

    OriginalEl autor AdamH

  2. 7

    En SQL Anywhere y Sybase IQ:

    select * from SYS.SYSPROCEDURE where proc_defn like '%whatever%'

    No estoy tan familiarizado con la ASE, pero de acuerdo a la documentación (disponible desde el sybooks.sybase.com), es algo así como:

    select * from syscomments where texttype = 0 and text like '%whatever%'
    probablemente la respuesta correcta, pero mi db no tiene esa columna. Estoy corriendo 11.2 en este cuadro (muy antiguo, de hecho), lo cual podría ser la causa de cualquier otra pensamientos?
    Tenga en cuenta que «Sybase» es el nombre de una empresa, no un producto. Utiliza Sybase Adaptive Server Enterprise (ASE) 11.2.

    OriginalEl autor Graeme Perrow

  3. 6
    select *  from sysobjects where 
        id in ( select distinct (id) from syscomments where text like '%SearchTerm%')
        and xtype = 'P'
    Dejar el xtype filtro apagado y usted tiene una manera fácil de buscar a través de todos los objetos de base de datos que tiene este texto, muy útil si usted está considerando la posibilidad de abandonar una función o procedimiento.

    OriginalEl autor Tom

  4. 5

    Por favor, recuerde, que el texto de la columna en syscomments es de tipo varchar(255), por lo que una gran procedimiento puede consistir de muchas líneas en syscomments, por lo tanto, el de arriba selecciona no encontrar el nombre del procedimiento si se ha dividido en 2 filas de texto en syscomments.

    Sugiero el siguiente seleccione, lo que se encargará el caso anterior:

    declare @text varchar(100)
    select @text        = "%whatever%"
    
    select distinct o.name object
    from sysobjects o,
        syscomments c
    where o.id=c.id
    and o.type='P'
    and (c.text like @text
    or  exists(
        select 1 from syscomments c2 
            where c.id=c2.id 
            and c.colid+1=c2.colid 
            and right(c.text,100)+ substring(c2.text, 1, 100) like @text 
        )
    )
    order by 1

    — felicitaciones para esto, vaya a que el creador de ASEisql

    OriginalEl autor B0rG

  5. 3
    select distinct object_name(syscomments.id) 'SearchText', syscomments.id from syscomments ,sysobjects 
       where texttype = 0 and text like '%SearchText%' and syscomments.id=sysobjects.id and sysobjects.type='P'
    Bastante código. ¿Qué hacer?
    Ejecutar y verificar

    OriginalEl autor

  6. 0

    Varias filas se utilizan para almacenar texto para los objetos de base de datos el valor podría ser a través de dos filas. Así que la respuesta más precisa es:

    select distinct object_name(sc1.id)
    from syscomments sc1
    left join syscomments sc2
    on (sc2.id = sc1.id and 
    sc2.number = sc1.number and
    sc2.colid2 = sc1.colid2 + ((sc1.colid + 1) / 32768) and
    sc2.colid = (sc1.colid + 1) % 32768)
    where
    sc1.texttype = 0 and
    sc2.texttype = 0 and
    lower(sc1.text + sc2.text) like lower('%' ||     @textSearched || '%')

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here