【ORACLE】DDLの取得
テーブル・マテビュー・INDEXのDDLを取得して、テーブル(マテビュー)別にファイルに吐きだすスクリプト。
DBMS_METADATA.GET_DDL、DBMS_METADATA.GET_DEPENDENT_DDLをカーソルと併用して使用し、
オブジェクト毎にDDLを取得しつつ、ファイルへの出力はUTL_FILEパッケージで行う。
テーブル・マテビュー・INDEXのDDLを取得して、テーブル(マテビュー)別にファイルに吐きだすスクリプト。
DBMS_METADATA.GET_DDL、DBMS_METADATA.GET_DEPENDENT_DDLをカーソルと併用して使用し、
オブジェクト毎にDDLを取得しつつ、ファイルへの出力はUTL_FILEパッケージで行う。
UNIXには標準でiconvコマンドというのがついている。
コマンド一つでテキストファイルのエンコードを変換してくれる手軽で便利な機能である。
iconvコマンドの使い方を含めて、本項で備忘録のため記載する。
UNIX系OSには、ファイルやディレクトリのタイムスタンプに限界値が設けられており、それを超えると変な日時に逆転してしまう。
⇒いわゆる「2038年問題」にあたる
UTC+9:00の日本において、その限界値は2038年1月19日12時14分頃である。
これを超える(これより未来の)日付を与えて変更しようとすると、
変更自体は可能だが変更結果が1901年12月14日等の変な日時になってしまう。
なお、touchコマンドは対応していない(2039年に変更しようとするとエラーになる)。
与えられた文字列をMD5でハッシュ値に変換する方法のメモ
11月の終わりに芦花公園に行ってきたのでその写真
EXCELのVLOOKUPは与えた検索値を指定範囲から探し出して、指定した列番号の位置の値を取得する関数である
例えば以下↓のようなシート
| A | B | C | |
| 1 | SEX | NAME_ID | NAME |
| 2 | 男 | A | Aさんです。 |
| 3 | 女 | B | Bさんです。 |
| 4 | 男 | C | Cさんです。 |
| 5 | IDを入力⇒ | ※ |
があったとき、B2:C4までを検索範囲として
| A | B | C | |
| 1 | SEX | NAME_ID | NAME |
| 2 | 男 | A | Aさんです。 |
| 3 | 女 | B | Bさんです。 |
| 4 | 男 | C | Cさんです。 |
| 5 | IDを入力⇒ | ※ |
C5セル(※のセル)に以下のVLOOKUP関数を記述
=vlookup(B5,B2:C4,2,false)
と入力すると、
「B5セルに与えた検索値をもとにB2:C4セルまでを検索して引っかかった行の2番目のセルを取得」するという指示になる。
よってB5セルに「A」と入力すれば「Aさんです。」という値が取得できるし
「C」と入力すれば「Cさんです。」という値が取得できる。
(こんな使い方はその辺ググれば出てくるがこの話の前段として…)
ただ、VLOOKUPは与えた検索値をもとにして右方向にしか検索できないので、
指定範囲内における検索値を持った列は一番左側の列に位置している必要がある。
よってこの例でいうと、「A」と与えたら列名「NAME_ID」の列より右側、列名でいうと「NAME」の項目しか取得できない。
つまり、「NAME_ID」より左側にある「SEX」の値を「NAME_ID」の検索値からは取得することが出来ない。
例えば以下のような検索範囲
| A | B | C | |
| 1 | SEX | NAME_ID | NAME |
| 2 | 男 | A | Aさんです。 |
| 3 | 女 | B | Bさんです。 |
| 4 | 男 | C | Cさんです。 |
| 5 | IDを入力⇒ | ※ |
において、C5セルに以下のVLOOKUP関数を記述
=vlookup(B5,A2:B4,0,false)
と入力してB5セルに「A」と入力しても、「男」という値は取得できない。
これは「A」で検索して引っかかった行の1つ左側のセルの値を取得しろ(つまり「SEX」列の値を取得しろ)という指示として無理矢理記述しているが
逆方向への検索にVLOOKUPが対応していないので、#N/Aになってしまう。(第三引数が1以上でないと関数が受け付けない)
ここまでが前置き。
要するに単純なVLOOKUPでは右側への検索しかできない。
検索値より左側にある列の値は、事前に右側にコピペしておくか、数式で参照させるなどして、
とにかく検索値より右側にしないとVLOOKUPでは検索できないのである。
これを、検索値より左側にある値をそのままにして、MATCHやINDEX、INDIRECTを使って検索する方法を実現する。
先日嫌な夢を見た。
といっても、怖いとか不思議とかそういう類ではない。
妙に現実的で嫌だったという意味である。