SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

2010-01-01から1年間の記事一覧

COBOLerからの脱却2

ウォーターフォールのままでも切り口を変えればシステム開発は大きく変わる。アジャイル開発にも移行できます。 ↓ 逆に、現状のままでアジャイル開発に移行すれば、大きな規模の案件ではカウボーイコーディングにしかならないです。ウォーターフォールで設計…

COBOLer からの脱却

COBOLer の DNA IPA の調査では、2009年の段階で96%がウォーターフォールを採用しているそうです。 http://sec.ipa.go.jp/press/20100330a.html まさに、ウォーターフォールは一つの文化として確実に定着しています。ウォーターフォールには COBOLer の DNA…

SQLの担当は分けるべき

おそらくSQLほど差の大きなスキルはない。 SQLはスキル差が非常に大きい。 本当にできない人はどうしようもなくできない。 SQLは仕様書であってプログラムではないのですが、その感覚がつかめないと習得は非常に難しい。 オプティマイザという人間に比べると…

リモコンは指で押せ!

SQLは大昔からあるメタプログラミングなのですが、メタプログラミングと呼ばれない理由は、自動生成されたコードが見えないからでしょうか。ベンダーにすればそれを見せてしまえばRDBMSの中身を見せているのと同じですし、見せる必要もないのでしょう。その…

SQLとはなんぞや?

SQLとはなんぞや?SQLができた当時は、COBOLのロジックを「なんとか簡単にできないか?」ということが主な目的でしたが、オブジェクト指向言語でSQLがない状態を考えてみましょう。 例えばJOINを書いてみる。 以下のSQL文をオブジェクト指向言語っぽく書いて…

SQLは最も高級言語2

SQLは、現在、普及している言語の中で最も高級な言語です。言語は高級になればなるほど人間に近づきシンプルにやりたいことが実現できる反面、実行速度は遅くなり、できることも限られます。 最も低級なマシン語と≒のアセンブリ言語であれば、コンピュータで…

SQLは最も高級言語

SQLは現在、普及している言語の中で最も高級な言語です。 高級か低級かというのは、どれだけCPU(の命令)と近いかです。CPUに近ければ近いほど低級でCPUから遠い、つまり、人間に近いほど高級言語ということになり、一般的に低級ほど扱うのは難しくなります…

SQLとオブジェクト指向言語の切替

SQLのイメージと他の言語のイメージ1 SQLのイメージと他の言語のイメージ2 の続きです。 ユーザインタフェースとのアクセスはストアドプロシージャで。 最終的に必要なシステムはこんな形だとします。 RDBサーバにあるデータで作れる形はここまでだとしま…

SQLはトップダウンで考える

以前、複雑なSQLをデチューンしていくというのを書きました。 ■1.OLAP関数を使って一括処理するパターン ■2.誤差配賦額をファンクションを使って計算するパターン ■3.誤差配賦額をファンクション内でループして計算するパターン ■4.ワークテーブル(ルー…

PL/SQLのカバレッジツールを作ろう4

よく考えたら、せめてワーニングのコメントを追加しておけば Grep などで使いやすいと気づいたので、ワーニングコメントを出力する機能を加えました。 よろしかったらダウンロードしてみてください。カバレッジツール.zip ※ Office2007(2003モードで保存) …

PL/SQLのカバレッジツールを作ろう3

思っていた内容にはならなかったけれど、SYS.DBMS_PROFILER パッケージを別操作で起動してカバレッジの情報を収集しておいて貰えれば、そこから集計することは可能です。当初の見込みではセッションを超えられると思っていたので、見込み違いでがっかりです…

PL/SQLのカバレッジツールを作ろう2

簡単にできるのですが、エクセルやサクラエディタからはイマイチ使えない。理由は単純でカバレッジのデータ収集開始をしたセッションと同じセッションで実行したストアドプログラムしかデータを収集してくれないから。 エクセルですべてのストアドプログラム…

PL/SQLのカバレッジツールを作ろう1

ストアドプロシージャでやるとカバレッジツールがないということが問題になるようです。 個人的には「別になくても良いんじゃない?」って思うけれど、なかったらストアドプロシージャは使えないと言われると、普及させたいと思う私は困ってしまう。簡単にで…

SQLのイメージと他の言語のイメージ2

SQLで処理する場合のイメージ 他の言語で処理する場合のイメージ 他の言語で処理するのは非効率になる 当たり前の話ですが材料と結果は同じです。途中経過が違うだけですが、理論的には、RDBMSを使うのにSQLで処理しなければ、必ず余計な処理が必要になりな…

SQLのイメージと他の言語のイメージ

Twitterで検索したりすると、SQLが分からないという人が相も変わらず非常に多い。おそらく、分からないという人は文法から入っているよね、いや、ほぼ間違いない。しかし、遠回りに見えてもイメージから入るべきです。 初めのうちは、AccessなどGUIでSQLが書…

ストアドプロシージャについて質問を頂いたのでまとめ

試用版を公開しました Oracleの試用版をダウンロード SQLServerの試用版をダウンロード セミナー情報 9月17日にセミナーでお話しさせて頂きます。 首都圏の皆様、無料ですのでよろしければご参加ください。 http://www.microsoftplatformready.com/jp/Home.a…

Oracle派なのに、なぜMicorsoftなのか

Micorsoftさんのセミナーでお話しさせて頂くことになりました。首都圏の方、お時間があればご参加ください。 https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032457242&culture=ja-JP 今回は入門編なので、過激なことを言ったりしないので、…

SQLの句や述語で使えるもの2

ご意見頂戴して、昨日の表を修正しました。 SELECT句、ORDER BY句で、テーブル関数は最終的にはサブクエリーにするので微妙なのですけれど、×としました。 普通は使わないので△の方が正しかったような気がするが……。この辺は微妙です。 エクセルファイルはこ…

SQLの句や述語で使えるもの

分かりにくいタイトルで手抜きですが。 漠然と書いている人が多いような気がして整理してみました。勝手に理解している人もいると思いますが、ものすごく重要なことですので完全に頭に入れてください。 皆さん、イメージあってますか? 再利用する方もいるか…

SQLは文法からやっちゃダメ

SQLができる人はたくさんいます。しかし、ほとんどの人は文法から勉強し、文法と実経験からSQLのスキルをつけていったのじゃないかと思う。 同じくオブジェクト指向言語などの手続き型言語も、文法から覚えた人がほとんどじゃないかな。 私の知る限り、手続…

INとEXISTSの違い

INとEXISTSは違います。 BETWEENと、不等号の組合わせなど、等価になる記述法はあるのですけれど、INとEXISTSは基本的に同じ結果を返すことが可能ですが、意味は違います。 この違いが分かるにはインデックスを理解する必要がありますので、まずは、インデッ…

インデックスについて

インデックスが分かってない人が非常に多い。 現実にあった例で、60カラムあるテーブルに、前から3つずつの複合インデックスを20個作るとか、30カラムを1つの複合インデックスにするとか、意味が分かっていない人が非常に多くいます。 ※ 詳しい人へ。ここで…

LIKE検索は使ったらダメな場合もある - 全文検索について

SQLのLIKE検索は非常に便利です。しかし、データ量によっては使ってはいけません。 例えば、 WHERE 備考 LIKE '%大阪%' とすれば備考欄に'大阪'が含まれているレコードをすべて取得することが可能ですが、当然、インデックスは使えません。必ずテーブルをフ…

オブジェクト指向言語で処理すると工数が掛かる

数回に分けて複雑なSQLををストアドプロシージャ(ファンクション)を使ってデチューンしてみました。 整理すると ■1.OLAP関数を使って一括処理するパターン ■2.誤差配賦額をファンクションを使って計算するパターン ■3.誤差配賦額をファンクション内でル…

ストアドプロシージャでループ処理 - 複雑なSQLをデチューンしてみよう

前回作成したスカラー値関数(fn誤差配賦消費税額)をループして処理する形にのものを作成しましたが、今回はメインのプロシージャを修正することにします。 都合、4種類書いてみましたが、全角の利用でイライラしながらも全部で6時間ぐらいでした。やってみ…

SQLでユーザ関数を活用2 - 複雑なSQLをデチューンしてみよう

元のストアドプロシージャをデチューンしていきます。 前回作成したスカラー値関数(fn誤差配賦消費税額)をループして処理する形に修正します。長くなっていますが、この方が読みやすいかも知れません。 ※ もちろん、実際には、明細単位、納品書単位、請求…

SQLでユーザ関数を活用 - 複雑なSQLをデチューンしてみよう

元のSQLを今回は、OLAP関数が使えないという条件でデチューンしてみます。ソースコードはSQLServerで記述しています。 まずはベースになるSQLを考える。 元のSQLが複雑と感じるか簡単と感じるかは人それぞれですが、ベースの部分は極めて単純です。重要な部…

デチューンの前にダミーのストアドプロシージャ

前回、複雑なSQLをデチューンするという話を書きましたが、弊社ではまずはダミーのストアドプロシージャを作るということを推奨していますので、ダミーのストアドプロシージャから作成します。 出力する内容が以下になるので、その通りのダミービューを作り…

複雑なSQLをデチューンしてみよう

初級編の続きは、 インデックスについて(カラオケ本で考えよう) IN、EXISTSと違いについて などなどを予定しているのですが、twitter で何度かつぶやいたもののまとめなので、ログなどと差は大きくはありません。 ちょっと訳あって、初級編をお休みして、…

前提が抜ける

私のコラムとか、ブログとか、前提が抜けるとよく批判される。 半分はわざとで半分は無意識です(苦笑) 「わざと」というのは、例えば、「SQLで書くと可読性が下がる」とか、「複雑なSQLを書くべきでない」ということが、一般的に言われていることを百も承…