-- 當前用戶物件
SELECT * FROM user_source
WHERE LOWER(text) LIKE '%關鍵字%';
-- 全庫物件 (排除 SYS)
SELECT * FROM all_source
WHERE owner != 'SYS'
AND text LIKE '%關鍵字%';
user_source/all_source 儲存 PL/SQL 原始碼,text 欄為 CLOB,INSTR/LIKE 均可。
-- 方法 1:syscomments (舊版相容,text 為 NVARCHAR(4000) 分段儲存)
SELECT DISTINCT o.name, o.type_desc
FROM sysobjects o
JOIN syscomments c ON o.id = c.id
WHERE c.text LIKE '%關鍵字%';
-- 方法 2:sql_modules (SQL 2005+,definition 為完整 NVARCHAR(MAX))
SELECT o.name, o.type_desc, m.definition
FROM sys.sql_modules m
JOIN sys.objects o ON m.object_id = o.object_id
WHERE m.definition LIKE '%關鍵字%';
優勢:sql_modules.definition 不分段、無長度限制、查詢更簡潔。
-- 僅搜尋預存程序
WHERE o.type IN ('P', 'PC') -- P=SQL SP, PC=CLR SP
-- 僅搜尋視圖/觸發器/函數
WHERE o.type IN ('V', 'TR', 'FN', 'IF', 'TF')
| 代碼 | 類型 |
|---|---|
| P | SQL Stored Procedure |
| PC | CLR Stored Procedure |
| V | View |
| TR | Trigger |
| FN | Scalar Function |
| IF | Inline Table-Valued Function |
| TF | Multi-statement Table-Valued Function |