【Oracle】同じ行を複数件取得する
自分で何を言ってるか良く分からないタイトルだけど、言いたいことは以下のようなこと。
問題
通常の検索結果
col1 col2 col3 A a 1 A a 2 A b 1 B a 1
求めたい検索結果(1行につき、2行出力したい)
col1 col2 col3 A a 1 A a 1 A a 2 A a 2 A b 1 A b 1 B a 1 B a 1
解決方法
パッケージを作ればできる。
余計なワークテーブルを作る必要もなく、既存クエリへの影響も少なく済む方法は、以下の通り。
Package ROW_OPERATOR
CREATE OR REPLACE PACKAGE ROW_OPERATOR IS TYPE REC_TYPE IS RECORD ( ROW_NUM NUMBER ); TYPE REC_TABLE_TYPE IS TABLE OF REC_TYPE; /** * 検索行した複数行に渡ってコピーするためのテーブルを取得します。 * @param A_CLONE_ROW_CNT コピー件数 * @return コピー用テーブル */ FUNCTION GET_CLONE_ROW_TABLE(A_CLONE_ROW_CNT IN NUMBER) RETURN REC_TABLE_TYPE PIPELINED; END; /
Package Body ROW_OPERATOR
CREATE OR REPLACE PACKAGE BODY ROW_OPERATOR IS /** * 検索行した複数行に渡ってコピーするためのテーブルを取得します。 * @param A_CLONE_ROW_CNT コピー件数 * @return コピー用テーブル */ FUNCTION GET_CLONE_ROW_TABLE(A_CLONE_ROW_CNT IN NUMBER) RETURN REC_TABLE_TYPE PIPELINED IS L_CNT NUMBER; L_REC REC_TYPE; BEGIN L_CNT := 1; WHILE L_CNT <= A_CLONE_ROW_CNT LOOP L_REC.ROW_NUM := L_CNT; PIPE ROW(L_REC); L_CNT := L_CNT + 1; END LOOP; RETURN; END; END; /
使い方
SELECT WK.ROW_NUM, TBL.* FROM table1 TBL, TABLE(ROW_OPERATOR.GET_CLONE_ROW_TABLE(4)) WK
単純結合によって、求めたい行を複数行出力させるようにする。
【C#】EnterキーでTabキーを押した時と全く同じフォーカス遷移を行う
EnterキーでTabキーを押した時と同じフォーカス遷移を行いたいという要望は、案外多い。
古いシステムからの名残りだったり、そもそも提案した人が古い人だったりで。
果てはWebシステムでもそれを望むこともあるが、今回はWindows Formsアプリケーションの場合の解決方法を記す。
Enterキーでフォーカス遷移する方法は、難しく考えすぎて意外とハマる。
他のサイトで調べた結果、最適解を導き出した。
参考サイト
Enterキーを押した時、まるでTabキーを押したかのように、次のコントロールにフォーカスを移す - .NET Tips (VB.NET,C#...)
色々あって全部試したわけではないが、コンポーネント単位に継承するのは非効率。
コメント欄に[たきる]ってなってるのは俺^^;
Windowsアプリケーションで[Enter]キーによるフォーカス移動を行うには?:.NET TIPS - @IT
C# - フォームで [Enter] キーが押された時にフォーカスを遷移させる
SelectNextControlメソッドを利用すると、『自分のオブジェクト配下に存在するコントロールを遷移する』だけであり、Tabキーと全く同じにはならない。
【SQL Server】Oracleへのリンクサーバーを作成する
サーバA
Windows Server 2008 R2 x64
SQL Server 2012 R2 x64
サーバB
Windows Server 2003 R2 x86
Oracle 11g 11.2.0.1.0 x86
サーバAのSQL Serverにリンクサーバーを作成し、サーバBを参照できるようにする方法が分かったので、記しておく。
前提としては、当たり前のように、それぞれのDBが、外部からアクセス可能になっていること。(特にOracle側)
【C#】フォーム終了時のValidating、Validatedイベントを制御する
Visual C# 2012
.NET Framework 4.5
入力エリアコントロールにあるCausesValidationプロパティはデフォルトではtrue。
そのため、何も意識しなければ、Validating、Validatedイベントは走行し、フォーカスを失った時に入力値を検証し、OKならフォーカス移動させる、NGならフォーカス移動させないということが可能だ。
その動作を利用して、フォームを閉じた時に制御を加えよう。
続きを読むこういうの書こうかな
あれができたら便利、これができたら便利、あれができたらなー、これができたらなー
世の中に出回っているアプリを使えばできるものが多いでしょう。
しかし、意外と以下のようなことが往々にしてあります。
- 個人的に使い勝手が好きじゃない。
- 外部アプリケーションからの呼び出しが行えない。
- バックグラウンド動作をさせることができない。
- 使い勝手やライセンスの関係上、客向けに提供できない。
- 複数のアプリを組み合わせないと実現できない。
- 古めかしい文化のせいで、自社開発以外のものを受け入れない。
まぁ、そんなことないかもしれませんが、あるかもしれません。
だから
じゃあ自分で作る
アプリを公開するわけではありませんが、アプリを作る方法をちょこちょこ小出しにしていこうかと思います。
もちろん、自分で作るといっても、OSS(オープンソース)のライブラリやフレームワークを使わないわけではありません。
しかし、極力無償の範囲内で実装する方法論をベースに記します。
金を払ってでも無償よりよっぽどいい!というものも記します。
【PHP】xdebugを設定する方法
いっつも忘れるので、サイトを徘徊して見つけるんじゃなくて、ひとまとめにしとこう。
環境
ダウンロード
設定
[XDEBUG] zend_extension="D:\php-5.6.5-nts-Win32-VC11-x86\ext\php_xdebug-2.2.7-5.6-vc11-nts.dll" xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_host=localhost xdebug.remote_port=9000 xdebug.show_local_vars=1 xdebug.dump_globals=1 xdebug.dump.SERVER=QUERY_STRING, REQUEST_URI xdebug.dump.GET=* xdebug.dump.POST=* ;xdebug.profiler_enable=1 ;xdebug.profiler_output_dir="D:\php-5.6.5-nts-Win32-VC11-x86\tmp" ;xdebug.auto_trace=1 ;xdebug.trace_output_dir="D:\php-5.6.5-nts-Win32-VC11-x86\tmp"
PHPのバージョン、スレッドモードを合わせたxdebugをダウンロードするのが前提で、設定内容は以下の通り。
zend_extension=xdebugのdllが存在するパス xdebug.remote_enable=onでリモートデバッグ xdebug.remote_handler=dbgpで固定 xdebug.remote_host=リモートホスト(ローカル開発は大抵localhost) xdebug.remote_port=9000がデフォルトポート xdebug.show_local_vars=1で変数の表示を行う xdebug.dump_globals=1でグローバル変数の表示を行う xdebug.dump.SERVER=QUERY_STRING, REQUEST_URI $_SEVER["QUERY_STRING"]、$_SERVER["REQUEST_URI"]のみ表示する xdebug.dump.GET=*で$_GETの中身を全部表示する xdebug.dump.POST=*で$_POSTの中身を全部表示する ;xdebug.profiler_enable=1でプロファイルを行う ;xdebug.profiler_output_dir=プロファイルの保存先ディレクトリ ;xdebug.auto_trace=1でトレースを行う ;xdebug.trace_output_dir=トレースの保存先ディレクトリ