【Oracle】PL/SQLの基本的なメモ
OracleでPL/SQL使う時の基本的なメモ
OracleでPL/SQL使う時の基本的なメモ
havingは、group byで集計する時に一緒に使える条件句である。
個人的には、group by部分を副問い合わせにしちまって外側でwhere句で絞り込む方が多いのだが、
集計すると同時に絞り込めるという点では、SQLがシンプルになってよいのだろう。
使い方の備忘録として残す。
テーブルの統計情報の取得方法とその確認方法の基本めも
あんまりoracleで日付の(特に「月」の)操作を個人的にすることがなかったのでよく知らなかったが、
add_monthsでちょっと困ったのでメモ
あるテーブルをつくる(Createする)とき、既存テーブルの項目定義情報をそのまま流用したいときがある。
そのとき、いちいち流用したいテーブルの項目定義調べてCreate文書くのが面倒だったりするので、
Select+Createの要領で、かつ「絶対に結果が返ってこない条件」を意図的に書くことで、
テーブルの項目定義を簡単に流用することができる。
OracleでNUL(UnicodeでいうとU+0000、制御コード)の後ろに文字列結合すると、結合した文字列が消滅するらしい。
要するにNULの後ろに文字をくっつけることができない。
そういうもんなのか?
なんとなく、まあ、気持ちはわからんでもないけどそういうこと勝手にやるなよなあ~って思う。
俺だけ?
以下のSQLにバインド変数「target_tab_name」を与えると、
コントロールファイルの中身に相当する内容をsqlで返してくれる。
結果をコピー⇒ペーストすればコントロールファイルの出来上がり。
テーブル・マテビュー・INDEXのDDLを取得して、テーブル(マテビュー)別にファイルに吐きだすスクリプト。
DBMS_METADATA.GET_DDL、DBMS_METADATA.GET_DEPENDENT_DDLをカーソルと併用して使用し、
オブジェクト毎にDDLを取得しつつ、ファイルへの出力はUTL_FILEパッケージで行う。
前回のやつは、
テーブル名を与えたらそのテーブルの全項目に対するNVL(LENGHB(COLUMN_NAME),0)を作ってくれるが、
その後先頭に「SELECT」と最後尾に「FROM [テーブル名]」を自分でつけて自分でSQLを流すという作業が必要だった。
そこまで含めて完全自動化できそうだったのでやってみた。
前に書いた記事の詳細を補足する(見返したら自分で良くわからなかったので)。
舞台となるのはDB LINKでつながっている2つのDBである。(↓のようなイメージ)
●LOCAL DBには「TABLE_A」というテーブルと、「SYNONYM_B」というシノニムがある。
SYNONYM_BはDB LINKを経由してREMOTE DBの「TABLE_B」に繋がっており、
LOCAL DB側に実体はない。
●REMOTE DBには「TABLE_B」というテーブルがある。
このDBはそれ単体で閉じており、DB LINKを経由してLOCAL DBを参照することはない。
●このとき、LOCAL DBに接続してSYNONYM_Bに対してSELECTをかけた直後、
そのトランザクションは「分散トランザクション」になる。