2013年2月3日日曜日

css3のinvalidとvalid

invalid、validを使用すると、入力要素の形式が無効か有効かによってスタイルを簡単に切り替えることができる。

例

// 入力要素が不正な場合は背景色を変える。
:invalid {
  background-color: #FFD4D4;
  border: 1px solid maroon;
}

// 入力要素が有効な場合は、スタイルを適用しない
:valid {
}

必須項目で値が入力されていない場合・・・




必須項目で値が入力されている場合・・・

2013年2月2日土曜日

[Oracle]multi insert

multi insertをつかうと、1つのSQL文で複数テーブルに一括でデータ登録ができるようになります。
これにより、各テーブルに対してinsertする時と比べてトラフィックが削減できパフォーマンス向上が見込めるのではないかと思います。

例1

各テーブルに対して値を指定して挿入
  1  insert all
  2  into test1 (id, name) values (1, 'name1')
  3  into test2 (id, name) values (1, 'name2')
  4* select * from dual

2 rows created.

JDBCを使用した場合は、バインド変数を使用して挿入する値を埋め込んであげると良い。
        PreparedStatement statement = connection.prepareStatement("INSERT ALL"
                + " INTO test1 VALUES (?, ?)"
                + " INTO test2 VALUES (?, ?)"
                + " SELECT * FROM dual");
        statement.setInt(1, 1);
        statement.setString(2, "あいうえお");
        statement.setInt(3, 1);
        statement.setString(4, "かきくけこ");
        int count = statement.executeUpdate();

例2

副問い合わせの結果に応じてinsert先テーブルを切り替えるにはwhen句と組み合わせると良い。
  1  insert all
  2  when mod(id, 2) = 0 then
  3    into test1
  4  else
  5    into test2
  6* select id, name from test3

5 rows created.

2013年1月22日火曜日

sqlplusのプロンプト文字列(SQL>)を変更する方法

sqlplusコマンドのsqlpromptを使用してプロンプトに表示される文字列を変更することができる。
例えばどのユーザでどのDBにつないでいるかを表示しておけば、接続先の誤りなどを気づけるようになる。

例

プロンプトにユーザ名&DBを表示する場合には、sqlpromptに以下のように設定すると良い。
set sqlprompt '&_user@&_connect_identifier>'

これで、sqlplusに表示される値は以下のようになる。
TEST_USER@TEST_DB>
TEST_USER@TEST_DB>
TEST_USER@TEST_DB>

sqlpromptに設定できるのは以下の値など。
  • _date
    日付
  • _connect_identifier
    接続文字列
  • _user
    接続ユーザ
  • _editor
    editで開くエディタ

2013年1月21日月曜日

[Oracle]PL/SQLのUSINGを使用した条件のバインド変数化

SQL文をリテラルで定義する必要がある場合(例えばテーブル名を変数の内容によって変わる場合など)に、USING句を使用して条件値をバインド変数化することができる。

例えば、以下のようにIDで絞込みを行う場合、IDの条件値を「:id」のようにしバインド変数化する。実際にSQL実行時に条件として指定する値はusing句を使用して条件に埋め込みます。

declare
  id account.id%type;
  type accounts_cur is ref cursor;
  accounts accounts_cur;
  account_rec account%rowtype;
begin
  id := 1;
  open accounts for 'select * from account where id = :id' using id;
  loop
    fetch accounts into account_rec;
    exit when accounts%notfound;
    dbms_output.put_line(account_rec.id);
    dbms_output.put_line(account_rec.name);
  end loop;
  close accounts;
end;

2012年12月26日水曜日

html5の数値入力欄

inputタグのtype属性をnumberにすると数値入力欄になります。

例

<input type="number" name="number" id="number">

ブラウザで確認すると以下の様な入力フォームが出力されます。





数値入力欄の値をJavaScriptでNumberとして取得することもできます。Numberとして取得したい場合は、valueAsNumberプロパティを通して値を取得します。

例

  (function() {
    var number = document.getElementById('number'),
        value;
    value = number.valueAsNumber;
    console.log(typeof value);
  })();

2012年12月21日金曜日

html5のrequired属性の背景色を変更

html5のクライアントバリデーションの必須属性(required属性)の背景色をjqueryを使用して変更する方法。

  (function ($) {
    $('input:required').each(function() {
      var $this = $(this);
      // 初期表示時の色設定
      changeColor($this);

      // チェンジイベントをトリガーとする色設定
      $this.change(function() {
        changeColor($this);
      });

      function changeColor(element) {
        var backgroundColor;
        if (element.val()) {
          // 値がある場合は背景色を白に
          backgroundColor = 'white';
        } else {
          // 値がない場合は背景色をピンクに
          backgroundColor = 'pink';
        }
        element.css({backgroundColor: backgroundColor});
      }
    });
  })(jQuery);

2012年12月11日火曜日

ORA-01704に、悩まされた時の対処方法

NCLOBへのインサート時に「ORA-01704: 文字列リテラルが長すぎます」が出た場合の対処方法。

下のコードのように、PL/SQLにして文字リテラルをCLOB型の変数に直接突っ込んであげるとエラーが回避できるみたい。
declare
  data nclob;
begin
  data := '長い文字列';
  insert into test values (data);
end;
/