SE=ぱそこんのお仕事の日々~常に定時帰りを目指すSEのブログ~

残業の日々を過ごすSEの気になった日常やシステム開発についての覚書のようなブログ

定義済みのパッケージのソースを表示するSQL

2009-03-18 03:02:03 | ORACLE関連
【定義済みのパッケージのソースを表示するSQL】

ORACLEで定義済みのパッケージのソースコードをsqlplusでSELECT文を
実行して表示する方法が判ったので覚書として以下に記します。
※パッケージ以外にもファンクション、プロシージャでも可能。

select text from user_source where name = 'パッケージ名称'

例)hogehogeというパッケージを定義後、その内容を表示する場合

SQL*PLUS起動後、パッケージを定義する
SQL>create package hogehoge
2 is
3 hoge_col char(1);
4 end hogehoge;
5 /

パッケージが作成されました。

パッケージ定義後、ソースコードを確認する。
SQL>select text from user_source where name = 'HOGEHOGE';

TEXT
------------------------------------------------------------
create package hogehoge
is
hoge_col char(1);
end hogehoge;

SQL>

パッケージの定義変更の際、変更前後の結果を比較する時に
使用しようと思ってます。


テーブル名の大文字小文字

2009-02-18 00:02:36 | ORACLE関連
【テーブル名の大文字小文字】
たまには技術的な覚書をと思いまして、書いてみました。

ORACLE10gの環境でテーブルを定義した際、
テーブルのCREATE文は正常終了したのに
そのテーブルをODBC等で接続して参照しようと
するとエラーが発生するという現象が発生しました。

エラーが発生したテーブルのCREATE文には
テーブル名を「"」で囲って
アルファベットの小文字が指定されていました。
こんな感じで
create table "aaa"( b char(1) );
テーブルの名称を「"」で囲った場合、select文とかで
参照する際は、from句に指定する際も"aaa"のように記述しなければ
参照できません。

ちなみに、上記のテーブルを定義したまま、
create table aaa ( b char(1) );
を実行してみたら、正常終了しました。

select tname from tab;
を実行してみたら
TNAME
-------------
AAA
aaa

と出力されました。

"aaa"と定義するか、aaaと定義するかで、大きな違いがあるのですねぇ…。

個人的には不慮の事故から勉強になりました。

oracle10gにおける統計情報の威力

2009-02-05 02:30:18 | ORACLE関連
【oracle10gにおける統計情報の威力】

Oracle10gで統計情報を取る・取らないでパフォーマンスにすごい影響がでることを最近思い知らされました…。

PL/SQLのバッチ処理で入力データを作業テーブルに一時的に格納し、作業テーブルでレコードを編集して、最終的な出力データを作成する処理で、データ件数は数万件だったのですが・・・

統計情報を取る前は処理時間が1時間ぐらいかかっていたのですが・・・
入力データを作業テーブルに一時的に格納した後、統計情報取得し、その後の処理を実行するようにしたら、なんと!!3分程度で終ってしまったのです…。
うーん・・・。

また、最近、リリースに際して、データ移行があったのですが、データの移行後にテーブルの統計情報を取り忘れて参照する処理が物凄く遅いという事態が発生し、酷い目にあいました。。

Oracle10gでは統計情報を取得しないと偉いことになります。
お気をつけ下さいませ。