ひとこと

― 今日のひとこと ―
年に1回くらい、EVE Onlineやりたくなるのよね。
(2025.12.24)

2013年8月17日土曜日

Oracle PL/SQL開発 No.3 -SQL Developerによるデバッグ-

現場ではSQL DeveloperとA5:SQL Mk-2を使って製造と単体試験を行っています。

SQL Developerでデバッグする方法をメモ。
ちなみに今回はプロシージャをステップ実行しています。


1.ユーザにデバッグ権限を付与する。
プロシージャのデバッグに必要な権限は以下の2つ。

・Debug Connect Session
・Debug Any Procedure

  GRANT DEBUG CONNECT SESSION ,DEBUG ANY PROCEDURE TO <ユーザ名>;




2.デバッグしたいプロシージャを、デバッグ用にコンパイルする。
「接続」のツリーからプロシージャ名を右クリックし、コンテキストメニューから「デバッグ用にコンパイル」を選択する。




3.デバッグ画面に移る
プロシージャ名をクリックすると、微妙にコードが整形されたデバッグ画面に遷移する。




4.ブレークポイントを設定し、デバッグを開始する。
ブレークポイントを設定したい行の行番号をクリックするか、その行でF5キーを押してブレークポイントを設定する。
ブレークポイントを解除する時も同様。
※処理が行われない行(コメント行など)にブレークポイントを設定しても意味がありません

その後、画面上方のデバッグボタンをクリックする。

赤い丸印がブレークポイント。てんとう虫がデバッグボタン。



5.引数がある場合は入力する。
デバッグボタンを押すとダイアログが表示される。
そのダイアログ中のコード部分に、引数の値を入力できる。
入力後、「OK」ボタンをクリックする。






6.ステップ実行する。
F8キーを1回押すと、処理が1行実行される。

ここで変数の値を監視することもできる。
監視したい変数をコード中で選択し、右クリックしてコンテキストメニューの「監視」をクリックする。

「監視」ツリーに選択した変数の現在の値が表示される。


監視機能はすごく便利だけど、カーソル属性は監視できない様子




こんなところかな
暇があったらいつかユニットテストの方法も書いておこう
レンジが僕を呼んでいる。炒飯食べてきます。

2013年7月10日水曜日

情報処理技術者試験について

情報処理技術者試験。

学生だった2011年秋から、新人SEとして忙しく憂鬱に過ごしている今春まで4回受験。



2011年秋 基本情報技術者 合格
2012年春 応用情報技術者 合格
2012年秋 情報セキュリティスペシャリスト 合格
2013年春 データベーススペシャリスト 合格

そんな僕が、IT業界での情報処理技術者試験の評価を軽くメモしておく。



ITパスポート
専門知識としては低レベルすぎてIT業界ではまったく評価されない。
新人ならまだしも、普通は受験するのも憚られるレベル。

難易度 :低
就活評価:低
社内評価:低


基本情報技術者
情報系の学生なら持ってて欲しい。
2年かけても合格できない学生はITの適性がかなり低い。
就活ではそこそこアピールできるが、
「基本的な知識はあるんだな」「そこそこ勉強したんだな」と思われる程度。
現場では持ってても特に評価にはならない。

難易度 :低
就活評価:中
社内評価:低


応用情報技術者
情報系の学生でもこれを持っている人は少ない。
就活では良いアピールになる。「真面目に勉強してきたんだな」と思われる。
地頭が悪いか不真面目だと合格できない。そこそこ難関。

難易度 :中
就活評価:高
社内評価:中


スペシャリスト
情報セキュリティ:「四天王最弱」と言われる事もあるが問われる内容はかなり高度。開発職では非実用的。
ネットワーク:最難関の一角。合格には膨大な専門知識が必要。しかしその分かなり実用的らしい。
データベース:最難関の一角。必要な知識はネットワークほど多くないが深い理解とセンスが必要。かなり実用的。
エンベデッド:異色。組込み系に縁がないと学習にとんでもなく時間がかかるらしい。持ってる人を見た事がない

各分野とも国内最難関。
ひとつでも持っていると普通の学生の間では崇められる。
新人で2つ持ってると先輩が近寄ってこなくなる。
現場では「その分野は詳しいんだな」って感じ。
しかし中堅以上は資格より実務経験優先。

難易度 :高
就活評価:高
社内評価:高


論文系は知りません。




今ちょうどデータベース関係の案件に携わっているんだけれども
データベーススペシャリストを取って良かったと心底思っています。

現場ではテーブル数100弱、属性数1000以上のデータベースを扱ってるからね。。
難解なER図をすらすら読めるのはかなり楽。
それなりにSQL知ってるから効率的なクエリを作るのに時間がかからない。
業務知識を持ってるのも大きい。

応用情報技術者もなかなかの難関資格ではあるけど、実務ではあまり通用しないな。
スペシャリスト試験と比べると各分野の内容もかなり低レベルに感じる。
(H23特別の応用DB,SCを解いてみたら計15分程度で両方満点とれた・・・)


というわけで、技術者を目指すなら早いうちにスペシャリストを取りましょう。


追記:情報処理技術者試験について No.2

2013年6月1日土曜日

Oracle PL/SQL開発 No.2-指定したテーブルの主キーを表示-

普段は社用PCのローカルにインストールしたOracle DBでプログラムを書いていて、
テストテーブルや変更履歴を自動保存するトリガなんかを色々と作って使っている。

面倒なので自宅PCのOracle DBではデフォルトのサンプルを使ってなんやかんやしているわけだが
サンプルのテーブルは僕が作ったわけではないのでテーブル構造がわからない。

型とNot Null制約の有無くらいならdescribeで分かるけどね・・・
主キーが知りたいんだよ!っていう場合が多々ある。

主キーを判別する方法はいくつかあるようだが
user_cons_columnsテーブルを使ってユーザが指定したテーブルの主キーを列挙するPL/SQLプログラムを作ってみた。


declare
  -- レコード型コレクション(結合配列)変数
  type column_data is table of user_cons_columns%rowtype index by pls_integer;
  col column_data;
  -- カーソル変数
  type refcs is ref cursor;
  cs refcs;
  -- ループカウンタ
  lc number default 1;
begin
  -- カーソルにSQL文を設定してオープン
  open cs for
   'select * from user_cons_columns
    where constraint_name = (
      select constraint_name from user_constraints
      where table_name = :table_name_input
      and constraint_type = ''P''
    )' using upper('&table_name_input');  -- ユーザ入力値を大文字に変換してバインド

    -- Fetchループ
    loop
      fetch cs into col(lc);
        exit when cs%notfound;
        -- 所有者と対象テーブル名は一度だけ出力
        if 1 = cs%rowcount then
          dbms_output.put_line('所有者:'||col(lc).owner||' / '||
                               'テーブル:'||col(lc).table_name);
        end if;
        dbms_output.put_line('主キー:'||col(lc).column_name);
        lc := lc + 1;
    end loop;
  
    -- 結果セットが0行だった場合はエラーメッセージを表示する
    if 0 = cs%rowcount then   -- !カーソルをcloseした後はカーソル属性を使用できない!
      raise_application_error(
        -20999,
        '指定した表またはビューが存在しないか、データが空です。'
      );
    else
      dbms_output.put_line(CHR(13)||CHR(10)||'正常に処理が終了しました。');
    end if;
  close cs;
exception
  -- テーブルに主キーが無い場合はエラーメッセージを出力
  when no_data_found then
    dbms_output.put_line('主キーがありません。');
  -- その他のエラーが発生した場合は対応するエラーメッセージを出力
  when others then
    dbms_output.put_line(sqlerrm);
end;
/


実行すると入力要求が出る


主キーを知りたいテーブルの名前を入力する。
たとえばサンプルのEMP表だと結果はこうなる。

EMPNO列が主キーだということがわかる。


複合主キーのテーブルを作ってみた。

このDOUBLE_PRIME表の主キーは

COMP_ID列とEMP_ID列。複合主キーにも対応していることがわかる。



大したこと無いプログラムだけど、作りたい物が作れた時の達成感は味わえた。






データがinsertされてない表には使えないのはご愛嬌!
(もう疲れ果てました)

Oracle PL/SQL開発 No.1-SQL Developerインストール-

こうして投稿するのは4ヶ月ぶりくらいか
2~4月はDBスペシャリストの勉強と社内研修、4~5月は社内研修とPL/SQL研修で死ぬほど忙しかった。

PL/SQL研修といっても「現場出る前にこれやっとけ」って上長から言われて
『プロとしてのOracle PL/SQL入門』をやってただけなんだけどね(僕だけしかも社内研修と並行してたった3週間で)
昼休みは昼食を摂る暇もなくすべて勉強に費やし、毎日終業後は定時で帰る同僚たちを背に居残り。
土日も課題が出るからストレスたまりまくり。合間にはネットワークスペシャリストの勉強もしてるわけで
他の新人と比べて学習の量も難度も高すぎやしないか・・・特に平日なんか気の休まる時がまるで無いんだが。。
今日もバルク処理やら何やらのプログラム作らないといけないんだよ月曜提出だよ



まぁ愚痴はこの辺にして、SQL版Eclipseのような開発環境SQL Developerのインストール方法をメモ。
※事前にJavaとOracle SQL環境の用意が必要です。

1.ここからファイルをダウンロードする



2.ダウンロードしたファイルを解凍し、『sqldeveloper.exe』を起動

初回起動時はjava.exeのパスを尋ねられるので入力する。
Javaをデフォルトの位置にインストールしたならProgram Files内にJavaフォルダがあるはずなので、
その中にあるjdkのbinフォルダにjava.exeがあります


3.画面左側の「接続」を右クリックし、「接続の作成」をクリックする



4.Oracleデータベースへの接続情報を登録する

接続情報を入力したら、「テスト」ボタンをクリックして接続確認をする。
正しくDBに接続できたらステータス欄に「成功」と表示される。



ここまでやれば開発できる状態になる。
sqlスクリプトはメニューの「ファイル」->「新規」から作成する。



Terapadとかメモ帳で作ったsqlファイルって、SQL*Plusで実行するとコメント内外問わず日本語が文字化けして
プログラムによってはちゃんと動かないんよね。
その点SQL Developerで作ったsqlファイルはしっかり動くからいいよね
入力補完機能もあるしF5かF9押せば実行できるし開発作業も楽



ちなみに、DBMS_OUTPUTの出力内容を確認する方法は以下の通りだ

1.メニューの「表示」->「DBMS出力」をクリック



2.緑色十字マークの「接続のDBMS_OUTPUTを有効化」ボタンをクリック


これだけ。


複数の上司から聞いた話では、JavaとPL/SQLとShellプログラミングができるとかなり重宝されるとのこと。
特にPL/SQLは若い人はやりたがらないから人材が全然足りないんだと。
だから早いうちにPL/SQLを覚えておくと今後大きな武器になるらしい





関係ないけど、さっき京急蒲田駅の6番ホームでリーアム・ニーソンに激似の日本人男性を見かけた。