タグ: DB コメントスレッドの表示切替 | キーボードショートカット

  • 西川 洋平 7:03 PM | 2013年5月25日 パーマリンク |
    タグ: DB,   

    SQLServer ストアドプロシージャをGrepする 

    ストアドプロシージャ内をGrepしたいなぁと思ったら、あった。
    ネットからの拾いもの。

    --スカラ関数
    --@SpName : プロシージャの中味を取得するためのプロシージャ名
    Create Function fncFindSp (
    @SPName Varchar(255)
    )
    Returns Varchar(8000) As
    Begin
    
    Declare @SpBody Varchar(8000)
    Declare @RetText Varchar(8000)
    
    Set @SpBody = ''
    Set @RetText = ''
    
    Begin
    Declare Cur1 Cursor For
    
    Select syscomments.text
    From sysobjects
    Inner Join syscomments
    On sysobjects.id = syscomments.id
    Where sysobjects.xtype = 'P'
    And sysobjects.status >= 0
    And sysobjects.name = @SPName
    Order By
    syscomments.colid
    
    Open Cur1
    Fetch Next From Cur1 Into @SpBody
    
    While (@@Fetch_Status <> -1)
    begin
    If @SpBody <> ''
    Begin
    If RTrim(@RetText) = ''
    Begin
    Set @RetText = @SpBody
    End
    Else
    Begin
    Set @RetText = @RetText + @SpBody
    End
    End
    Fetch Next From Cur1 Into @SpBody
    End
    Close Cur1
    End
    Return @RetText
    End
    go
    
    --Grep用ストアド
    --@seachWord : ストアドプロシージャ内を検索する文字列
    Create Procedure spGrep
    @seachWord Varchar(255)
    As
    BEGIN
    select X.*
    from
    (
    Select
    sysobjects.[name] As ProcName ,
    dbo.fncFindSp(sysobjects.[name]) as ProcBody
    From sysobjects
    ) X
    where X.ProcBody like  '%'+@seachWord + '%'
    END
    

    実行

    EXEC dbo.spGrep '検索文字列'
    go
    

    参考⇒ここ

     
  • 西川 洋平 11:15 PM | 2013年4月10日 パーマリンク |
    タグ: DB,   

    RDBで階層構造 

    今後も探してしまいそうなのでメモ。

    代表的なところで、以下の3モデルがあるが、MySQLなら経路列挙モデルが良いらしい。以下、コピペ。

    • 隣接リストモデル
    • それぞれのノード(階層データを構成する個々の要素)が親を保存しておきツリー構造をたどることによりデータ構造を表現します。
      Oracleの階層問い合わせのようにSQL拡張がない場合(MySQLにはありません)は、別途プログラム等でループを組む必要がある場合があり、パフォーマンスが良くありません。
      比較的理解しやすいですがMySQLで利用するには用途が限られます

    • 入れ子集合モデル
    • ノードを円と見なし親子関係を左右の番号を使用し円の包含関係として捉える事によりデータ構造を表現します。
      検索に関しては隣接リストモデルと違い圧倒的有利であるが、直接の親・子やツリー構造をたどるのは複雑になります。
      また、親子関係を左右の番号が追加、削除を繰り返すことにより歯抜けになります。(歯抜けが気持ち悪ければ正規化が必要)
      構造は面白いが理解しづらくパフォーマンスが良くないところが見られますが、MySQLでも利用できます。

    • 経路列挙モデル
    • 各ノードに絶対パスをデータとして保存しデータ構造(UNIXのファイルシステムやURLの構造にそっくり)を表現します。
      ノード自身のレコードに親子関係がパスとして含まれているので、SQL文が簡素になります
      また、パスは一意なりますし、MySQLでも正規表現を扱えるようになりましたので、極めて高い親和性と高いパフォーマンスが望めます。
      MySQLで利用するには、この経路列挙モデルが一番親和性が高いように思います。

      経路列挙モデルでOK

    [参考サイト]
    RDBで階層構造を扱う方法
    MySQLで階層化データを使うには
    経路列挙モデル(準備編):MySQLで階層化データを使う

     
c
新規投稿作成
j
次の投稿 / 次のコメント
k
過去の投稿 / コメント
r
返信
e
編集
o
コメント表示 / 非表示
t
トップへ移動
l
ログインへ
h
ヘルプを表示 / 非表示
Shift + ESC
取り消し