優柔不断なプログラマの日記

思いつきでポチポチ書きます

(ORACLE SQL)フラッシュバック?

2006年10月23日 | プログラミング
Oracle10gに初めて触れてから1年未満です。

開発中にテスト用にテーブル内容を保存しておきたいことがよくある。
思ったとおりの動作にならず、再度同じデータで検証したい場合や、テストデータを作り直すのが大変な場合。

CREATE TABLE "TABLE1_BAK" AS SELECT * FROM "TABLE1";

まあ、こんなことをやりますね。

で、ふとテーブルの一覧をみたらば。(ちなみにツールはOSqlEditを使わせて頂いています。)
なんか、"BIN$…"というテーブルが大量にあるじゃないですか。
おかしなネーミングのテーブル作ったの誰?ぱっと見BASE64エンコードしてるっぽい?しかもDROPできない。

ググルと。Oracle Flashback Table/Drop という機能があるようです。
要するにオペミスでDROPしたテーブルを戻せるという機能ですね。Windowsのごみ箱と一緒ですね。備忘録しておきます。

【削除オブジェクト一覧】
SELECT OBJECT_NAME ,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME LIKE 'BIN$%';

【削除オブジェクト復元】
FLASHBACK TABLE "BIN$....." TO BEFORE DROP;
【別名】
FLASHBACK TABLE "BIN$....." TO BEFORE DROP RENAME TO "別名テーブル";

【SQL*PLUSでごみ箱を見る】
SHOW RECYCLEBIN

【ごみ箱全体を掃除】
PURGE RECYCLEBIN;

【特定の表や索引を掃除】
PURGE TABLE|INDEX "BIN$.....";

【データベース全体のごみ箱を掃除】
PURGE DBA_RECYCLEBIN;

【ごみ箱に入れない】
DROP TABLE "TABLE" PURGE;

#無差別にこのDROP ~ PURGEを使い出しそう…Windowsでも
#いつの間にかShift + Delete → Enterで高速抹消したりするようになってるし。

スカイプ

2006年10月19日 | つぶやき
仕事で、同じチーム内でのコミュニケーションにスカイプを使っています。
音声ではなく、チャットのみですけど。メールするほどでもなく、今どうしても
話す必要があるわけでもないようなときに使います。自分へのメモ的なところ
もあるかも。相手に対しては、たとえば打ち合わせ中で、机にメモを残すぐらい
のイメージです。複数人に同報的にも使えるのでその辺も考慮しつつ。

まあそれはいいのですが、それと同時に世界中のスカイプともやりとりできる
ワケで。たまに、見知らぬ人のコンタクトに追加されるようです。

先日中国の方が私を追加したようで。まあ、ちょうど休憩中だったのでチャット
で話しかけてみました。こっちは日本語オンリー。相手も日本語は通じました。

こっちも中国語を勉強してみようかと少し思いましたが。なんか難しい?
話言葉は7種類?10種類?とかあってネイティブ同士だと通じないぐらい違う
とか。でも文字で書くと同じとか?。。津軽弁と関西弁ぐらい違うけど、文章
は標準語みたいな感じなのかな。文字も繁?簡?とかあるみたいだし。
まあよくわからないけど、IMEは中国語入力できるようにした!

これだけ変換した。
你好 nihao
我是日本人 woshiribenren
东京 dongjing

(ORACLE SQL)TRANSLATE関数とは

2006年10月16日 | プログラミング
今日も教えてgooを眺めているとデータベースカテゴリで目にとまった「TRANSLATE関数」。
なんだこれは。さっそくググルと。

 TRANSLATE( 検査文字列 , マッチ文字列 , 置換文字列 )

説明を読んでもなんか複雑。自分にわかるように書いてみると
1.検査文字列から1文字取り出し。
2.マッチ文字列の中に含まれるか?
 YES:置換文字列からマッチ位置に対応する桁位置の文字を取り出し、置換する。
 NO:検査文字列から取り出した文字そのまま。
3.検査文字列から次の文字を取り出し繰り返し。

(実用性なしの例)
SELECT TRANSLATE( 'あいうえお' , 'あうお' , 'アウ' ) FROM DUAL
結果→'アいウえ'

置換文字列がマッチ文字列より短く、マッチ文字列にマッチしても、
対応する置換文字列がない場合は''(空文字)になるみたい。


では、置換文字列が空文字ならマッチ文字列に含まれる文字を一発で消去できる?
SELECT TRANSLATE( 'あいうえお' , 'あうお' , '' ) FROM DUAL
結果→NULL

ダメです。こういう場合は、検査文字列に出てこない文字をダミー的に使うか、
消去する文字のいずれかに一度揃えてからREPLACEするのが一般的のようです。

SELECT REPLACE( TRANSLATE( 'あいうえお' , 'あうお' , '0' ) , '0' , '' ) FROM DUAL
SELECT REPLACE( TRANSLATE( 'あいうえお' , 'あうお' , 'あ' ) , 'あ' , '') FROM DUAL
結果→'いえ'

さらに、これを二重にして、指定文字を消去するではなく、指定文字のみを残す。
SELECT REPLACE( TRANSLATE( 'あいうえお'
            , REPLACE( TRANSLATE( 'あいうえお' , 'あうお' , '0' ) , '0' , '' )
            , '0')
       , '0', '' )
FROM DUAL
結果→'あうお'

まあ何かに使えそうかもしれないけど。
人の作ったソースを解析中にこんなSQLを発見したらグッタリしそう。


大きく重い携帯

2006年10月14日 | TB練習版
vodafone 904Tです。300万画素カメラ、Felica、音楽、GPS搭載とフル機能(?)に惹かれて購入(機種変)。
ちなみに直前の機種はJ-PHONE J-SH53という当時としては多機能なモデル。

初めての東芝機種でしたが・・・4ヶ月経っても操作感になじめず…
これまでシャープばかりで、大差ないだろうと思っていたのですが、
結構違和感ありますね。
次回は操作も確かめてから決めよう…。

命名規則

2006年10月13日 | プログラミング
VB6.0プログラミングしてたころ。
Dim intKamoku As Integer
Dim strKamokuName As String
のように頭にデータ型をつけていた。あまり深く考えていなかったが。
そういうコーディング規約にしていたプロジェクトもあったし、そんなもんかなくらいに思っていた。
なんとなく教えてgooを見ていたらこれを「ハンガリアン表記法」(またはハンガリー型表記法)というらしい。
ググルとMicrosoftが推奨していたとか。
思えばソースなんて人のマネ or マニュアル・ヘルプのサンプルから入るし、
それが元をたどればMicrosoft推奨ってのもわかる気もする。
しかし、.NETでは非推奨らしい。(.NETは触ったこと無いけど)

7~8年前、java講習を受けたとき、クラス名は先頭大文字で語ごとに先頭大文字、変数・メソッドは頭小文字で語ごとに先頭大文字にすることが多いみたいに聞いた。
たとえば、class AppCommonLibや、String karikataKamokuName; とか public int getUriageKingaku()。
「大文字部分をラクダのコブに見立てて、ラクダ記法という」と記憶しているんだけど...
どうやら先頭が小文字で始まるものがラクダ(Camel形式)で、大文字で始まるとパスカル記法(Pascal形式)というらしい。
そして.NETではこちらを推奨するそうな。
まあ最近はPHPばっかりだが。

あ、でもアンダースコア使う人いるよね。私も使うこともあるかも。
uriage_date_fromとか。
むかーし、C言語ちょっとやったとき、使ったかも。
昔のC時代ってソースに大文字う使ったっけ?
#define LINE_COUNT_MAX 30とか、暗黙的に定数のみ全部大文字だったような…私が触ったのはMS-Cでしたが...

COBOLは問答無用で大文字オンリーだよね。区切りはハイフンかな。
03 WK-KARIKATA-KINGAKU PIC(9). こうか。