サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは本日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。
Oracle11gR2 ExpressのPL/SQLで添付ファイルつきメール送信用パッケージを作ってみました。(本文UTF8エンコード) [事前準備] Oracle11gR2 Expressは、こちらから入手できる。 http://www.oracle.com/technetwork/database/express-edition/downloads/index.html?ssSourceSiteId=ocomen 現在(2011/12)では、まだ日本語の案内ページはないようだが、インストールされるExpress EditionはSQLやストアドのエラーメッセージも日本語で出てくるなど、日本語をサポートしているので特に問題はない。 今回の目的では、メール送信のために文字コードの変換やBASE64への変換などを使用することになるが、Express版では以下の点に注意する必要がある。 Exp
SQLアンチパターン 作者: Bill Karwin,和田卓人,和田省二,児島修出版社/メーカー: オライリージャパン発売日: 2013/01/26メディア: 大型本購入: 9人 クリック: 698回この商品を含むブログ (46件) を見る本書の著者はサロゲートキーに対して消極的なのだから、「サロゲートキーの使い方がおかしい」とか言うのはお門違いなのかもしれないが... 健忘症的サロゲートキー 「SQLアンチパターン」第3章の記述を総合すると、著者はサロゲートキーについて以下のように考えていると思う。 自然キーの一意性・不変性が当てにならない場合に「自然キーの変更の影響を受けないようにする」という目的でサロゲートキーを導入する。 自然キーの重複を防ぐために、自然キーにUNIQUEインデックスを振ることを推奨する。 自然キーの代わりにサロゲートキーを外部キーにする。自然キーは他のテーブルに転
業務でDBを扱っていて、一意な値をとるカラムがあるのに別途連番を振ってそれを主キーとしているテーブルを見つけたのでなぜだろうと思いググってみると、それはサロゲートキー(代理キー)と呼ぶんだそうです。 これに対して、業務で使用するそのままのデータが入った主キーをナチュラルキーといいます。 で、どっち使えばいいの どちらを使えばよいかネット上でも議論されているのでまとめてみます。 RDBMSの理論的にはナチュラルキーのでの設計が本質的な問題。 ナチュラルキーとサロゲートキーについての議論 IDリクワイアド SQLアンチパターン しかし現実的には設計スキル不足や追加要件などが原因で物理設計の仕様変更が起こりうる。 サロゲートキーをつけなかったせいで死にそうになった。 サロゲートキーには仕様変更の保守性を高める効果があるため、これを使おうというのが現場の知恵。 ネット上ではサロゲートキー派が圧倒し
裏を返すと、社員テーブルに小川さんと長谷川さんのどちらか1人だけしか存在しなかった場合には、上のUPDATE文はエラーなく実行できます。したがって、このエラーは、テーブルの状態によって出たり出なかったりする幽霊のように厄介な存在です。ときどき、試験のときにデータのバリエーションが不足していてこのエラーを見過ごし、実運用に入ってから出現することがあるので注意が必要です。 対処法 この幽霊に対処する方法は、大きく2通りあります。 ① 情報の登録方法をINSERTに変えてしまう ② 小川さんと長谷川さんのうち、適当にどちらか1人だけを代表に選んで登録する どちらを取るのがよいのかは、その場その場の判断です。①INSERTを使った洗い替え方式は、論理的ですっきりしていますが、常に全行DELETE(またはTRUNCATE)して全行INSERTする必要があるので、更新コストが多くかかります。一方、②代
今日、同僚から MySQL って CASE 式を SQL の中に記述できましたっけ?と聞かれて、SQL 文に CASE - when 式を記述できることを初めて知りました。PL/SQL でのみ有効な構文かと勘違いしてました。 CASE 式はSQL-92 で標準に取り入れられており、意外と歴史は古いです。SQL99 からかと思いました。しかしながら、超便利な CASE 式を知っている人は意外と少ないと思います。Oracle なら同様の処理が記述できる DECODE 関数の方がメジャーですね。実際僕もこちらを用いて業務 SQL を書いてました。 しかし実際のところ、CASE 式の方が明らかに高機能でした。DECODE 関数を使っているOracleユーザには、是非CASE 式への乗り換えを勧めます。CASE 式には下記の通り4つの利用方法があります。 既存のコード体系を新しい体系に変換する(DE
JOINは複数のテーブルを連結させるために用意されたキーワードです。単純にテーブルを連結させる以外にも、LEFT JOIN ONやUSINGなどの便利なキーワードがあるので、いろいろ試してみましょう。 リレーションによる関係付け テーブルの作成とデータの挿入 ここでは、購入履歴テーブル(テーブル名=purchase)、商品テーブル(テーブル名=goods)、顧客テーブル(テーブル名=customer)を作成し、それを使って説明していきます。CREATE TABLEとINSERTを使って、テーブルの作成とデータの挿入をしておきましょう。 テーブルを作成する際の手順は、CREATE TABLEに続き、作成するテーブル名を指定します。次に、カッコ内にフィールドの定義を列挙していきます。フィールドの定義はフィールド名とデータ型、それに制約などを必要なだけ宣言します。 CREATE TABLE構文
図6●複合インデックスの利用は,検索条件のカラムに左右される<BR>複合インデックスとは,1つのインデックスに複数カラムが含まれるインデックスである。インデックス内のカラムの順番と,検索条件のカラムによって,複合インデックスの利用の可否が決まる。(1)検索条件に指定したカラムが1個の場合,そのカラムが複合インデックスの先頭カラムでなければインデックスは利用しない。(2)検索条件に指定したカラムが複数個の場合,それらのカラムが複合インデックス内の先頭から使われていればインデックスは使われる。WHERE句内の順番は関係ない NULL値は,特殊な値である。この値は,「データが存在しない」という意味を持つ。すべてのデータ型に対して利用できるが,特殊な値であるため,その扱いには注意が必要である。 NULL値の特性を説明する前に,NULL値の表示方法を説明しておこう。NULL値は「データが存在しない」
スポンサード リンク SQLの中でIF文のような条件式を使うなら、CASE WHEN ~ または DECODE関数を使用します CASE 式 WHEN 条件1 THEN 値1 WHEN 条件2 THEN 値2 ・ ・ ・ WHEN 条件n THEN 値n ELSE デフォルト値 END 式が条件1に一致(TRUEと評価)したら値1を戻し、条件1に一致せず条件2に一致したら値2を戻し、このように式と条件が一致する最初の値が戻されます。 どの条件とも一致しなかった場合は、ELSE句に指定したデフォルト値を戻します。 ただし、ELSE句(デフォルト値)は省略可能で、省略されたときはNULL値が戻されます。
CASE 式 と DECODE 関数の違い 標準 SQL の CASE 式 とオラクルの SQL 特有の DECODE 関数は、ほぼ同じ機能をもち、CASE 式 も DECODE 関数 も短絡評価(※)であるが、この2つは NULL の取り扱い方で大きく異なっている。 (※) 短絡評価(ショートサーキット:short circuit evaluation):条件に該当するものが見つかると後続の条件は評価しない DECODE 関数 よく知られた非常に便利な変換関数、引数がある値のときに別の値に変換する関数である。 DEOCDE のパラメータ数の上限は 255 であり、当然条件指定はそれ以下(条件と結果で 2 パラメータのため 127 以下)になる。 CASE 式 もほぼ同数の上限がある。 検索 CASE 式 のように評価する式が個々に設定できないため、範囲指定などの条件指定が基本的に行えない
第2回を読まれた方は、この両者を変換するSQLを紹介したことを覚えているでしょう。そのSQLを利用すれば、「列持ち」⇔「行持ち」の変換を行うことが可能なので、最悪、設計時点でどちらかのモデルを選択したあとに、「やはりうまくいかなかった」ということでもう一方のモデルへチェンジすることも、できないわけではありません(アプリケーション側の修正など、相応の工数は覚悟せねばなりませんが)。しかし、最初は可能な限り「行持ち」を選択するべきです。 その理由は、列持ちモデルの拡張性と保守性の低さです。実際、今は2008年なので年度ごとに作られた列も2008年まで用意していればよいとして、来年になったらどうすればよいのでしょう? 列をもう1つ追加するほかありません。すると毎年テーブルの構造を変えなければなりませんし、このテーブルへアクセスするSELECT文から結果を受け取るホスト言語まで、ほとんどシ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く