Oracle Master 参考書・問題集の嘘

\ あなたにピッタリの銘柄がみつかる /

みんかぶプレミアムを無料体験!

プランをみる

2009/12/18 - LONERさんの株式ブログ。タイトル:「Oracle Master 参考書・問題集の嘘」 本文:んーでは簡単なとこからいくよーただし整数に限る・・・はウソ! 単一行関数の SUBSTR なんかには数値を入れるところがあります。 SUBSTR(abcde, 1, 2) abcde

株式会社ミンカブ・ジ・インフォノイド
(C) MINKABU THE INFONOID, Inc.

Oracle Master 参考書・問題集の嘘

LONERさん
LONERさん

んーでは簡単なとこからいくよーただし整数に限る・・・はウソ!

単一行関数の SUBSTR なんかには数値を入れるところがあります。

SUBSTR(abcde, 1, 2)

abcde の中の1番目の文字から2文字取り出す関数。
オイラの編み出した うまい覚え方は ここでは伝授しないお。

んで、1 と 2 が入っているところは整数だ! と本に書いてあったりするが、これはウソ。

俺が見たところ、有理数 a を整数で処理すべきところに代入した場合、次の値が引数として使われる。
a [|a|] / |a|

|| は絶対値、[] はガウス記号。
要するに、a の絶対値を超えない最大の整数に、a と同じ符号をつけたものだ。

この式で正しいかどうかはともかく、整数でなくてもおkなのである。

ついでに、単一行関数 LPAD 等についても、本には書かれていないことがある。
LPAD(abc, 20, 'あ')

こういうときはどーなるんですか?

えー、やったけどわすれました。
あと、パディング文字に2文字以上入っている場合とか。
予約語をテーブル名にしたテーブルは作れない・・・はウソ

create table "SELECT" (col1 number);

というSQLを実行してみてください。
正常終了します。

ただし、これを SELECT 文 などで扱うときには注意が必要です。


SELECT は予約語なので、
SELECT * FROM SELECT;
なんてやってもエラーです。

SELECT * FROM "SELECT";
とすればおk。

まぁ、そこまでして使いたくないけどな。

実際、どんなテーブルができているのかというと・・・
USER_OBJECTS を覗いてみまーす。

OBJECT_NAME を見てみると・・・・・・SELECT とあります。
"SELECT" ではないです。(二重引用符は含まない)


OBJECT_NAMEの型は VARCHAR2 なので、これでおkなわけです。

そう、VARCHAR2。ってことは?
select という名前のテーブルも同時に作ることができます。
呼び出すときは二重引用符で囲んでくださいね。

では、ABC というテーブルと、abc というテーブルがあった場合、
select * from abc;
ではどちらが呼び出されるのでしょうか。

ABC が呼び出されます。SQL の中の文字は、全て大文字として扱われるようです。
だから、ABC を削除して、abc だけ存在する状態だと、上のSQL はエラーです。
小文字のヤツを使いたければ二重引用符で囲んでください。

実験はしてないですが・・・数字や特殊文字から始まるテーブルもおkってことじゃね?
USING だと動けなくなることがある!

USING は、2つ以上のテーブルをつなげるときに使います。

それはこ~んな場合に起こります。テーブルを3つ考えてください。列の型は全部 number にします。
table1 :列名は col1, col2
table2 :列名は col1, col2, col3
table3 :列名は col2, col3


ハイ、table1 と table2 を col1 で結合します。
table1 と table3 を col2 で結合します。
使うのは USING。

SELECT * FROM table1
JOIN table2 USING(col1)
JOIN table3 USING(col2);

3行目で「列の定義が未確定です。」と出ます。
col2 は全てのテーブルにあるので、どこかわからないんですよね。
でも USING ですから、修飾子はつけられません。
table1.col2 や table3.col2 とすると、「ここでは修飾された列名は使用できません。」というエラーが出ます。

USING は、保守が面倒のようですね。

こういう細かい仕様的なところは、参考書・問題集にはありません。

Oracle の問題集・参考書は、上に載せた3種類しかないと思っているんですが・・・売ってないからね・・・ほかにもあるよ!という方いらっしゃいましたら是非おしえてください。

安くていいのがあればそっちのほうがいいからね。
LONERさんのブログ一覧