10

给定出现在 proc 中某处的文本字符串,如何在 Sybase 数据库中找到存储过程?我想看看数据库中的任何其他 proc 是否具有与我正在查看的类似的逻辑,并且我认为我有一个非常独特的搜索字符串(文字)

编辑:

我正在使用 Sybase 11.2 版

4

6 回答 6

15

Graeme 的回答有两种变体(所以这也不适用于 11.2):

这也列出了 sproc 的名称,但如果文本出现多次,将为每个 sproc 返回多行:

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

这仅列出每个存储过程一次:

select distinct object_name(id) from syscomments 
   where texttype = 0 and text like '%whatever%'
于 2008-11-06T13:57:28.377 回答
8

在 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%'
于 2008-10-30T16:40:24.157 回答
6

请记住,syscomments 中的文本列是 varchar(255),所以一个大过程可以由 syscomments 中的多行组成,因此,如果在 syscomments 中将其拆分为 2 个文本行,上述选择将找不到过程名称。

我建议以下选择,它将处理上述情况:

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的创建者

于 2011-12-29T13:03:17.220 回答
6
select *  from sysobjects where 
    id in ( select distinct (id) from syscomments where text like '%SearchTerm%')
    and xtype = 'P'
于 2010-07-13T13:35:21.470 回答
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'
于 2010-08-12T05:03:28.813 回答
0

多行用于存储数据库对象的文本,值可能跨越两行。所以更准确的答案是:

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 || '%')
于 2018-06-06T16:19:03.267 回答