【Oracle SQL】文字関数を書く練習問題を作ってみた
Oracle Master BronzeのSQLを受験する予定なのですが、文字列を操作する関数の使い方がまだおぼえられません。
なので、簡単な練習問題を作って勉強してみました。
ちなみに、選択肢を選ぶより1からSQLを書けるようにした方が実務でも役に立つと思い、SQLを書く形式にしました。
- 使用するテーブル
- 問題①
- 問題①の答え
- 問題②
- 問題②の答え
- 問題③
- 問題③の答え
- 問題④
- 問題④の答え
- 応用問題
- 応用問題の答え
- おわりに
OracleのSQLを無料で学習できるAPEXを使うまでにつまづいたポイント2つ
下記の連載を読んで、APEXなるものを利用してOracleのSQLの勉強をしようとしたのですが、7年前の記事ということもあり、つまづいたポイントがあったのでまとめました。
APEXとは?
APEXは通常、Oracle Databaseにインストールして使用する製品です。
しかし、SQL文を試す「SQLワークショップ」という機能を備えているため、無料でOracleのSQLを学習できます。
また、ブラウザで利用できるため、ソフトのインストールが不要です。
APEXを使う利点は?
APEXを使用してSQLを学習する利点は、Oracle特有の文法を学習できるということです。
SQLの学習をするには、自分のPCにMySQLなど無料のDBを入れてしまうのが実践的で良いと思います。
ですが、Oracleは有料のため、Oracleを仕事で使う場合や、Oracleの試験勉強のためにはAPEXを使用するのが良いです!
(Oracleとその他のDBでは、細かい文法や変数の扱いなどが異なります)
APEXを使う方法は?
わたしは、以下の記事の通りの流れでAPEXを使用しました。(ユーザー登録などが必要です)
www.atmarkit.co.jp
以下では、↑の記事の通りに進めてうまくいかなかった部分を2つ説明していきます。
その1.ユーザー登録の返信メールが遅い
まず「あれ?」と思ったところは、ユーザー登録で必要事項を記入した後、返信のメールが来るまでに半日程度かかったことです。
もちろん無料サービスですし、時間がかかることに不満はないのですが、「遅ければ1日程度かかります」とか書いておいてくれれば…。
なぜこんなことを言うかというと、メールアドレスを間違えて記入したのかな?と思い、もう一度登録してしまったからです。
二重登録になってしまいました、オラクルさんすみません…!
その2.EMP表が初期サンプルとして含まれていない
↑で紹介した記事の最後では、EMP表が初めから用意されている前提でselect文を実行しています。
しかし、私が同じ文を実行したところ、「ORA-00942: 表またはビューが存在しません。」とエラーが発生してしまいました。
そこで、どこかからサンプルをダウンロードできないかと探したところ発見したので、方法をご紹介します。
①SQLワークショップを選択
②ユーティリティを選択
③サンプル・データセットを選択
④EMP/DEPTをインストール(記事で使われているEMP表です)
これでインストールは完了です。
実際にSQLが実行できるか確認してみましょう。
SQLワークショップから、SQLコマンドを選択し、SELECT文(select * from emp;)を入力して実行すると、emp表のデータが表示されています。
おわり
サーブレットの定型文メモ
サーブレットって、「コレをするにはコレを書かないといけない」っていう決まったコードが多いので、よく使うものをまとめました。
自分のコピペ用メモなので詳細な説明はしていません。時間があったら別記事で書きたいと思います…!
文字データをクライアントに送る
クライアントのブラウザに Hello, world! と表示させるためには、次のように書きます。
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("Hello, world!");
リクエストパラメータの取得
HTMLのformタグの中で入力された値をサーブレットで使用するためのコードです。
request.setCharacterEncoding("送信元HTMLの文字コード"); String 変数名 = request.getParameter("リクエストパラメータのname");
セッションスコープの取得・基本操作
セッションスコープ(利用者がブラウザを閉じるかプログラムで削除するまで使える)にオブジェクトを保存したり、保存したものを取り出したりする時の書き方です。
// セッションスコープの取得 HttpSession session = request.getSession(); // セッションスコープに保存 session.setAttribute("属性名", インスタンス); ----------------------------------------- // セッションスコープからインスタンスを取得 型名 変数名 = (型名)session.getAttribute("属性名"); // セッションスコープからインスタンスを削除 session.removeAttribute("属性名"); // セッションを無効化するまでの最大の秒数を指定 session.setMaxInacticeInterval(秒数);
フォワード
フォワードとは、処理をJSPなどに移すことです。ちなみにオブジェクトをサーブレット・JSP間で共有するには、リクエストスコープに保存します。
RequestDispatcher dispatcher = request.getRequestDispatcher("フォワード先"); dispatcher.forward(request, response); // リクエストスコープに保存 request.setAttribute("属性名", インスタンス); ----------------------------------------- // リクエストスコープからインスタンスを取得 型名 変数名 = (型名)request.getAttribute("属性名");
データベースへの接続・参照
PreparedStatementは、SQL文をデータベースまで運んでくれるもの、というイメージです。
例外処理やクローズ処理は省略してます。
// データベースへの接続 Connection con = DriverManager.getConnection("URLを入力", "ユーザ名", "パスワード"); // PreparedStatementの取得 PreparedStatement pst = con.prepareStatement("SQL文"); // SQL文を実行し、結果をResultSetに取得 ResultSet rs = pst.executeQuery(); // 結果の表示 while(rs.next()){ String 変数名 = rs.getString("データベースの列名"); }
データベースへの接続・更新
接続の部分は上記の「参照」と同じです。
// データベースへの接続 Connection con = DriverManager.getConnection("URLを入力", "ユーザ名", "パスワード"); // PreparedStatementの取得 PreparedStatement pst = con.prepareStatement("SQLの例:INSERT INTO ~ VALUES (?, ?)"); // ?の部分に代入 pst.setString(1, "文字列"); //1つ目の? pst.setInt(2, 数値); //2つ目の? // SQLを実行し、更新した行数を取得 int num = pst.executeUpdate();
DataSourceの使用
DataSourceの設定は、META-INFフォルダ内のcontext.htmlファイルにしておく必要があります。
InitialContext c = new InitialContext(); DataSource source = (DataSource) c.lookup("java:comp/env/ context.xml内のname "); Connection con = source.getConnection();