スポンサードリンク

Oracleで全てのユーザーオブジェクトのソースを取得しよう

Oracle で全てのユーザーオブジェクトのソースを取得する必要があったので、ちょっと調べてみました。

まずは取得可能なオブジェクトの種類を下記の SQL で取得します。

SELECT OBJECT_TYPE FROM USER_OBJECTS GROUP BY OBJECT_TYPE

もうちょっとスマートな方法がある気がギュンギュンするのですが、とりあえずはこれで取得できます。

次に該当の種類のオブジェクトの一覧を、下記の SQL で取得します。

SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'オブジェクトの種類'

で、最後にオブジェクトのソースを下記の SQL で取得します。

SELECT LINE, TEXT FROM USER_SOURCE WHERE NAME = 'オブジェクト名' ORDER BY LINE

なお、LINE カラムの値が行番号に相当しますので、LINE で ORDER BY しておきます。

この一連の作業をプログラムにすると、

#!/usr/bin/perl

use strict;
use warnings;

use DBI;

my $dbh = DBI->connect("dbi:Oracle:HogeHoge","UserName","Password");

my $sql = "SELECT OBJECT_TYPE FROM USER_OBJECTS GROUP BY OBJECT_TYPE ORDER BY OBJECT_TYPE";
my $sth = $dbh->prepare($sql);
$sth->execute();

while(my @data = $sth->fetchrow_array){
  my $ObjKind = $data[0];
  
  my $sql2 = "SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = '$ObjKind' ORDER BY OBJECT_NAME";
  my $sth2 = $dbh->prepare($sql2);
  $sth2->execute();
  
  my $fileName = 'Oracle_'.$ObjKind.'.txt';
  $fileName =~ s/ /_/g;
  
  open(FH, ">", $fileName);
  while(my @data2 = $sth2->fetchrow_array){
    print FH "-- $data2[0] ----------------------------------------\n";
    
    my $sql3 = "SELECT LINE, TEXT FROM USER_SOURCE WHERE NAME = '$data2[0]' ORDER BY LINE";
    my $sth3 = $dbh->prepare($sql3);
    $sth3->execute();
    
    while(my @data3 = $sth3->fetchrow_array){
      print FH "$data3[1]";
    }
    
    print FH "--------\n\n\n\n";
  }
  close(FH);
}

$dbh->disconnect();
 

こんな感じになります。

参照リンク
 ・ぷろぐらむ・えんじにあ 【Oracle】プロシージャ・パッケージを取得するSQL
 ・ORACLE/CREATE PROCEDURE編 - オラクルちょこっとリファレンス

追記:
これでバッチリだぜ! と思ったのもつかの間、この方法では DATABASE LINK と INDEX と SEQUENCE と TABLE と VIEW の情報(作成SQL)は取得できませんでした。残念。

スポンサードリンク
コメント
Verify your Comment
Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

コメントを投稿
トラックバック

このページのトラックバックURL:
http://www.typepad.com/services/trackback/6a01310f1f31c0970c01901e523a78970b

このページへのトラックバック一覧 Oracleで全てのユーザーオブジェクトのソースを取得しよう:


プロフィール


  • 書いてる人:夢界 陸

    名古屋在住のおっさん。
    プログラミングやガジェットの話など、 日々の興味を徒然と綴っています。



    Twitterやってます @mukairiku



    運営サイト
    www.mukairiku.net

アクセスランキング


ブログ内検索

Licenses

  • Creative Commons License

OTHER

  • このブログのはてなブックマーク数

    ブログパーツ
Blog powered by TypePad

スポンサードリンク