OracleDatabase

【Oracle】group byで使う条件句「having」について


havingは、group byで集計する時に一緒に使える条件句である。
個人的には、group by部分を副問い合わせにしちまって外側でwhere句で絞り込む方が多いのだが、
集計すると同時に絞り込めるという点では、SQLがシンプルになってよいのだろう。
使い方の備忘録として残す。


 


【Oracle】ADD_MONTHS関数について


あんまりoracleで日付の(特に「月」の)操作を個人的にすることがなかったのでよく知らなかったが、
add_monthsでちょっと困ったのでメモ


 


【Oracle】既存テーブルの項目定義流用してテーブルCreateだけする(WHERE句に0=1つける)


あるテーブルをつくる(Createする)とき、既存テーブルの項目定義情報をそのまま流用したいときがある。
そのとき、いちいち流用したいテーブルの項目定義調べてCreate文書くのが面倒だったりするので、
Select+Createの要領で、かつ「絶対に結果が返ってこない条件」を意図的に書くことで、
テーブルの項目定義を簡単に流用することができる。



【Oracle】NUL(U+0000)の後ろには文字列結合できない


OracleでNUL(UnicodeでいうとU+0000、制御コード)の後ろに文字列結合すると、結合した文字列が消滅するらしい。
要するにNULの後ろに文字をくっつけることができない。
そういうもんなのか?
なんとなく、まあ、気持ちはわからんでもないけどそういうこと勝手にやるなよなあ~って思う。
俺だけ?


 


【ORACLE】DDLの取得


テーブル・マテビュー・INDEXのDDLを取得して、テーブル(マテビュー)別にファイルに吐きだすスクリプト。
DBMS_METADATA.GET_DDL、DBMS_METADATA.GET_DEPENDENT_DDLをカーソルと併用して使用し、
オブジェクト毎にDDLを取得しつつ、ファイルへの出力はUTL_FILEパッケージで行う。



 


【ORACLE】テーブル容量の確認2


前回のやつは、
テーブル名を与えたらそのテーブルの全項目に対するNVL(LENGHB(COLUMN_NAME),0)を作ってくれるが、
その後先頭に「SELECT」と最後尾に「FROM [テーブル名]」を自分でつけて自分でSQLを流すという作業が必要だった。
そこまで含めて完全自動化できそうだったのでやってみた。


 


【ORACLE】分散トランザクションについて


前に書いた記事の詳細を補足する(見返したら自分で良くわからなかったので)。

舞台となるのは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をかけた直後、
 そのトランザクションは「分散トランザクション」になる。