2010/11/30 火曜日

ANYとかALLとか

カテゴリー: ORACLE, SQL — mori @ 20:00:02

どうも覚えないと苦しいので覚える。

まず、【=ANY】これは【in】と同じ意味
逆にじゃぁ【not in】は?と調べたところ【<>ALL】とのこと。【<>ANY】ではない。

他、
【>ALL(リスト値)】・・・ALLの場合はリストの「最大値より大きいもの
【<ALL(リスト値)】・・・逆はリストの「最小値より小さいもの
【>ANY(リスト値)】・・・ANYは不等号はリスト値より大きいものとなっているので、逆の「最小値より大きいもの」となる
【<ANY(リスト値)】・・・こっちも同じ。リスト値より小さいものとなっているので、逆の「最大値より小さいもの」となる

※【>=、<=】は値を含むで後同じ

あんまりリスト値の最大or最小の・・・なんて使い方はあまりしないのだが、こんな方法もあるということを覚えておく。

2010/11/26 金曜日

もうちょっとわかりやすく・・・

カテゴリー: ORACLE — mori @ 20:00:20

申込から受験までの流れがちょっと複雑なのでメモ

先日DBAを受けたときは・・・
・iStudyに登録してチケットを購入(2枚で25200ほど。カード払い)
・プリメトリックに登録して受験の申込(チケットNOが必要)
・試験をやっているところであればどこでもいつでも受験可
試験当日・・・
・2種類の身分証明書が必要(うち1枚は写真付き)
・受付で試験NOを記入する。受け付けの人が教えてくれる。
・顔写真を撮る。
・必要最低限以外はロッカーにしまい、ホワイトボードというメモ板とペンを持ち試験室へ。(目薬持込可)
試験・・・
・試験は終了ボタンを押すか、時間がくれば終わる。
・自動に合否が表示。(その画面を帰りに印刷してくれる)
・帰りにサインをして終了。

ざっとこんな感じ。

2010/11/2 火曜日

本日の格闘

カテゴリー: ORACLE, SQL, コマンド — mori @ 20:00:05

<概要>
某イントラシステム内のコンテンツ全部に新規でVIEWを作成する。

<流れ>
1、テキストにVIEW作成対象テーブルを書く

2、SQL*LOADERでテーブルに取込

3、メインプロシージャ実行でロードしたテーブル名をサブプロシージャに渡す

4、サブプロシージャでテーブルカラム名を取得しCREATE VIEW文を作成、テーブルにINSERTする

5、CREATE文の入ったテーブルを全件スプール

6、スプールファイルを実行しVIEW作成

終了
いろいろ戦った。
この流れを作る前に、当初4でテーブルにINSERTではなくCREATE文を発行したかった。
しかしプロシージャ内ではCREATE VIEWは発行できなかった。エラーメッセージから権限がありませんとあったのでEMからいじってみる。
この作成したプロシージャの権限かと思っていたが実はユーザーのシステム権限の付与で解決した。

しかしこの処理はワンショット。このためだけに本番EMにシステム権限を付与するのも手間だということで別の方法を模索した。

それがこの流れ。
たまたまログ用としてテーブルに出力していたところからファイルに出して実行すればできるのではと。
その中でも問題は多々あった。がすべて個別に解決できるものだった。

まず4でテーブルにCREATE文をINSERTする時に4000byte以上は入らずどうするか。
2カラムにわけてテーブルにINSERTする事で解決。5の出力時に結合すればいいなと。

で5の出力。SELECTの結果を出したのだが、その結果でもVARCHAR(4000)以上はエラーとなる。
そんなデータの出力はどうするか。。。
調べてみたらCLOB型で対応できそう。使ってみる。

SELECT TO_CLOB(”) || COL01 || COL02 || ‘;’ FROM TBL_NAME;

しかしうまくいかない。

#CLOBはspool前にset long 1000などと出力数を指定してください。
#デフォルトは80です。

とか他にPAGESIZEやLINESIZEなどいろいろ5のSET文を設定してためす。

で次、実際に実行しようとしたときにSQL*PLUSでは1行MAX2500byteとのことで、ファイルあるCREATE文は1行にずらっと書いてあったためエラーとなる。
⇒SP2-0027: 入力が長すぎます(> 2499文字)。この行は無視されました。

改行すれば問題なし。でファイル出力時にreplaceかけてみたがきれいでなかったので、4のINSERT時に改行コード(chr(13)||chr(10))も一緒に出力。
これでSQL*PLUSの桁の問題が解決。

しかしまだ続く、改行付きでSPOOLできたものの変なところにNULLの改行があってVIEWが作成されない。
これは SET LONGCHUNKSIZE の設定でなんとかなりそう。
SET LONGとあわせて設定し無駄な改行が詰められた。こんなの初めて。

これで上記の流れをバッチ化したものを実行したところすべてVIEWが作成された。

« 前ページへ次ページへ »

HTML convert time: 0.110 sec. Powered by WordPress ME