2018年2月4日 星期日

找出含有『特定字串』的自訂物件(View, Stored Procedure, Function等)

MSSQL
可透過查詢sql_modules取得中各種使用者自建物件的原始碼 Source Code),如ViewStored ProceureFunction及其他物件,以下以定序 (COLLATE)處理不分大小寫需求,另外以中括號([])處理查詢底線(_)字元問題。 
SELECT schema_name(o.schema_id)         [Owner]
    , o.Name                                 [Object_Name]
    , o.type                                 [Object_Type]
    , REPLACE(o.type_desc, 'SQL_',  '') [Type_Desc]
FROM sys.sql_modules m
    INNER JOIN sys.objects o
         ON o.object_id = m.object_id
WHERE 1=1
  AND m.definition COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%STK[_]%' --不分大小寫
  AND o.type IN ('V') –View


ORACLE
ORACLE則可使用dbms_metadata.get_ddl指令取得物件建立原始碼,並以REGEXP_LIKE指令處理不分大小寫問題,使用ESCAPE指定逸出字元。
SELECT OBJECT_NAME
     , OBJECT_TYPE
FROM
     (
      SELECT OWNER
           , OBJECT_TYPE
           , OBJECT_NAME
           , dbms_metadata.get_ddl(OBJECT_TYPE  ,OBJECT_NAME, OWNER) TXT
      FROM ALL_OBJECTS
      WHERE 1=1
            AND OWNER        = 'ACE'
            AND OBJECT_TYPE = 'VIEW'
            AND OBJECT_NAME LIKE 'STK\_%' ESCAPE '\'  --查詢名稱字首為 STK_ 所有物件
      )
 WHERE 1=1 
       AND REGEXP_LIKE(TXT, 'CRNcy', 'i') --不分大小寫


ORACLE
MSSQL
不分大小寫
使用REGEXP_LIKE函數
使用定序
查詢包含底線(_
ESCAPE指定逸出字元
使用中括號包夾

沒有留言:

張貼留言