2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ

« なかよし号が無くなっていた | トップページ | ちょっと当てが外れた土曜日 »

2016.03.26

Oracleってこんな仕様だったっけ?

今の仕事で、RDBはOracleを使っています。
以前はOracleを使った仕事が多かったのですが、その後はあまり縁が無く、8i以降はだんだん疎遠になっていました。


今回、久しぶりにOracleを使ってみると、以前は気がつかなかった仕様が気になってきました。
一番おどろいたのは、空文字とnullが同じ扱いで区別できないということです。
列Aに空文字が入っているデータがあっても、WHERE句で「WHERE A = ''」では抽出できず、「WHERE A IS NULL」としなくてはいけないのです。もし列AにNULLが入っている列と空文字が入っている列があったら、それらを区別することが出来ないと言うことになります。
他のRDBでは当然空文字とNULLは区別できるので、Oracleがこんな仕様だったとはと驚いています。
区別しなくていいのが楽でいい時もあるんですけどね。


また、Oracleの仕様というよりSQL*Plusの仕様なのですが、「/* … */」 のコメントを使う場合、「/*」の後にwhite space を入れないと実行コマンドである「/」とみなされるというのも知らなかったです。SQL*Plusのマニュアルにも記載があります。
但し、SQL言語としてはwhite spaceは不要で、マニュアルにも明示的に「不要」だという記載があります。
そもそもSQLのコメントと言えば「--」だと思っていたのですが、いつの間にかCやJavaのブロックコメントと同じ「/* … */」というコメントが使えるようになっていたのですね。そもそもこれも知らなかったです。
まとめて複数行をコメントにしたい時にブロックコメントがあると便利ですから、そのような記述も可能になってきたのでしょうね。
しかし、DDLやバッチ的にデータを更新したりする処理を行うのに、SQLを書いたテキストファイルをSQL*Plusを使って流すというのはごく普通に行うので、SQL*Plusでこのような制限というか仕様があるというのは気をつけないといけないですね。


バージョンが上がって変わった所といえば、ログイン時のパスワードが大文字小文字を区別するようになった事です。
11gからこのような仕様になったようで、大文字小文字を区別するかどうかを設定(sec_case_sensitive_login)出来るようになり、区別するのがデフォルトになっているということのようです。
ちなみにユーザ名はこれまで通り区別無しです。
このような仕様になったのはセキュリティのためでしょうし、悪い事ではないと思いますが、これまでは大文字小文字を意識せずに使っていましたから、ログイン出来なかった時は「何で?」と思いました。


Img_7914


いずれも、ずっとOracleを使い続けている人にとっては当然の事なのでしょうが、久しぶりにOracleを使った私にとっては驚くことが多いですね。

« なかよし号が無くなっていた | トップページ | ちょっと当てが外れた土曜日 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/39755/63396024

この記事へのトラックバック一覧です: Oracleってこんな仕様だったっけ?:

« なかよし号が無くなっていた | トップページ | ちょっと当てが外れた土曜日 »

にほんブログ村

Amazon.co.jp