Подтвердить что ты не робот

Найти хранимую процедуру Sybase в db с учетом текстовой строки, которая появляется в proc

Как найти хранимую процедуру в базе данных Sybase с учетом текстовой строки, которая появляется где-то в proc? Я хочу видеть, имеет ли какая-либо другая proc в db аналогичная логика с той, на которую я смотрю, и я думаю, что у меня есть довольно уникальная строка поиска (литерал)

Edit:

Я использую Sybase версии 11.2

4b9b3361

Ответ 1

Два варианта ответа Грэма (так что это также не будет работать на 11.2):

Здесь также указано имя sproc, но будет возвращено несколько строк для каждого sproc, если текст появляется несколько раз:

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

Здесь перечисляется каждый sproc только один раз:

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

Ответ 2

В SQL Anywhere и Sybase IQ:

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

Я не знаком с ASE, но, согласно документам (доступно на sybooks.sybase.com), это что-то вроде:

select * from syscomments where texttype = 0 and text like '%whatever%'

Ответ 3

select *  from sysobjects where 
    id in ( select distinct (id) from syscomments where text like '%SearchTerm%')
    and xtype = 'P'

Ответ 4

Помните, что текстовый столбец в syscomments - это varchar (255), поэтому одна большая процедура может состоять из многих строк в syscomments, поэтому вышеприведенные элементы выбора не найдут имя процедуры, если оно было разделено на 2 строки текста в syscomments.

Я предлагаю следующий select, который будет обрабатывать описанный выше случай:

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

- для этого перейдите к создателю ASEisql

Ответ 5

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'