実務でOracleのSQL*Plus使い始めて、そろそろ1ヶ月です。
振り返りがてら、どんな感じで成長したのか見ていこうと思います。
SQLと出会った当初
知らない言葉が多すぎる
当時の脳内こんな感じでしたね。
- SELECT:わかる
- FROM:わかる
- WHERE:ホエア?
- HAVING:食事?
- オーダーバイク:かっこいい
単一行関数が出てきたあたりでオーバーフローしました。
SQLは「データ操作言語」で、私にとって多少蓄積のあった「プログラミング言語」ではないので、新しい単語と概念多すぎて全然頭に入ってきませんでした。
一文に要素が多すぎて読めない
C++がほんのすこし書けるんですが、せいぜい一行でセミコロンにたどり着きます。
SQL長過ぎませんか?
SELECTやWHEREで5個も出てきたらショートするし(しかもカラム名ってだいたい長い)、副問合せとかもうわからん。
上司や先人たちに蓄積されたスクリプト、1個の問い合わせに平気で20行くらいあります。
全然わからないのに、大量のアルファベットが直接脳内に来るので、毎日パンクしていたような。
思い通りの出力ができない
欲しいデータをどこに取りに行けばいいかわからない。
いい感じに出力したいだけなのに、上司のスクリプトをコピらないとできない。
Silver DBAを取るときに、そのくらい勉強したはずなのに…
「もうSQLとわかりあえる日は来ないんだ…」と思ってました。
いま
ユーザを消して作るSQLが書ける
DROP USER hogehoge CASCADE;
CREATE USER "hogehoge"
IDENTIFIED BY "egohegoh";
GRANT CREATE SESSION TO hogehoge;
GRANT RESOURCE TO hogehoge;
これですね。コード甘いかもしれないですが目を瞑って下さい。
実務で、検証時に無限回ユーザ(スキーマ)作って表作ってユーザごと消して…をやるおかげで、普通に書けるようになりました。
(SQLの勉強だけしてた頃は書けなかったです。なんでや)
SQL*Plusのおまじないがわかり、定義情報を取れるようになった
set lin 1000
set pages 500
col owner for a10
col max_value for 999999999999999999999999999
こういうのですね。
最初はおまじないと言われて育てられたが、気にはなっていた。
この子たちがわかって、やっと出力時の整形ができるようになりました。
1ヶ月仕事した結果、こんなのを1から書けるように。
spool C:\hogehoge\hogelog
conn hogehoge/egohegoh@oraora
set lin 1000
set pages 500
col owner for a10
col table_name for a50
col constraint_name for a50
select count(*)
from dba_indexes
where owner = 'hogehoge';
select owner,index_name
from dba_indexes
where owner = 'hogehoge'
order by index_name;
spool off
コード甘いかもしれないですが目を瞑って下さい(2回目)。
どこから取るのかすら不明だった定義情報も、a10をa20にして文字数オーバーの改行が起きないようにするなど、工夫しながら確認できるようになりました。
SQLとはわかりあえないと思ってたので、こういうのを仕事内容に合わせて柔軟に書けるようになったのは、感慨深いですね…
安全なDBの運用保守がちょっとわかる
依頼があってDBの運用保守する過程で、例えばカラム追加なら、
・カラム追加するテーブルは存在するか?
・既にテーブルに同名のカラムはないか?
など、安全に運用するための確認観点がわかるようになってきました。
止めてはいけない基幹システムですから、ミスしない仕組みは重要だなって常々思ってます。
まだまだ知らないこといっぱい
新人が1ヶ月でできるようになることなんて、たかが知れてると思います。
でも、こう見返すと「ちょっとはできるようになったのかも~」って調子に乗りそうです。
ここまで成長できたのは、何万行あるスクリプトをボンと渡してくれた上司のおかげですね。
最初はヒーヒー言ってましたが、今はすごく楽しいです。