Найти хранимую процедуру Sybase в db с учетом текстовой строки, которая появляется в proc
Как найти хранимую процедуру в базе данных Sybase с учетом текстовой строки, которая появляется где-то в proc? Я хочу видеть, имеет ли какая-либо другая proc в db аналогичная логика с той, на которую я смотрю, и я думаю, что у меня есть довольно уникальная строка поиска (литерал)
Edit:
Я использую Sybase версии 11.2
Ответы
Ответ 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'