PG(プログラマー)&SEによる業務に役立つプログラミング知識 

主に仕事で覚えた業務で使えるプログラム、パソコン、ソフトウェア、ハードウェアの知識を提供していくブログです。

分析関数 OVER() とWHEREに関して

2012年01月20日 22時00分47秒 | oracle
たまに、SUM() OVER() や MAX() OVER() などの分析関数を使いますが
SUM() OVER() 集計値でWHERE句に記述した条件のものって含むのかなとか迷ったりしますが、WHERE句の条件で対象外のデータは集計値に含まれませんね。

具体例としては

SELECT
A
,B
,SUM(C) OVER (PARTITION BY D,E) SUMROW
FROM TABLE_SAMPLE
WHERE F = 1

の場合ならSUMROWの値はTABLE_SAMPLEのF列が1のD列,E列ごとのC列の集計値となります。
コメント (0) |  トラックバック (0) | 

フェッチ・アクロス・コミット (fetch across commit)を回避

2011年10月02日 12時50分25秒 | oracle
カーソルのフェッチ中にトランザクション処理(COMMIT,ROLLBACK)をおこなうとフェッチ・アクロス・コミット (fetch across commit)というのでエラーとなってしまいます。

そのような処理がある場合の回避方法としては、

カーソルで取得したデータを1度配列の変数に代入してから、その配列変数をループさせるとうまく回避できます。

配列の変数もカーソル%TYPEにしてしまえば、ほぼカーソルでループしているようなものですから

ただ、2回ループするはめになってしまうので重い処理(ループ回数が多いなど)では遅くなってしまうかもしれません。

もっと、うまく回避できる方法があるのかもしれませんがすぐに思いつく方法としてはこれくらいかなと思います。

あとは自立型トランザクションってのをうまく使えば回避できる方法があるかもしれません。
コメント (0) |  トラックバック (0) | 

GROUPING

2011年07月31日 09時47分13秒 | oracle
オラクルでROLLUPとセットで使うのが便利なGROUPING
です。

これでその行が指定の列でグループ化されたものなのがわかります。

グループ化された列の場合は1
そうでない場合は2を返します。

意外と重宝します
コメント (0) |  トラックバック (0) | 

PL/SQLでBREAK処理

2011年06月09日 23時37分19秒 | oracle
PL/SQLでブレイク処理するときに、前レコードを保持して、比べるという方法がメジャーかと思いますが

よくよく考えたらLEADってのを使えば、前レコードと比べる必要がないですね。

忘れがちで、私自身もLEADを使えばよかったと感じることもしばしば。

LEADなひとつ前のレコードとかひとつ先のレコードを取得できるので、どこでブレイクするか明白です
コメント (0) |  トラックバック (0) | 

Windows7 64bit IIS7.5 ColdFusion8の組み合わせ

2011年05月25日 07時23分56秒 | 本日の業務報告(日記)
仕事で使用しているパソコンが新しくなり、開発環境を入れたのですが、

ColdFusion8をインストールするとAdministrator画面が開かないし、IISでlocalhostすら見れない…

環境的にはWindows7 64bit IIS7.5 ColdFusion8で

どうやら、ColdFusionは32bitなのが原因みたい

IISのアプリケーションプールってのの詳細で実行モード32bitをTrueにしたら、動きました。

コメント (0) |  トラックバック (0) |