2009年06月29日


PL/SQL文を実行する

DBMS_OUTPUT.PUT_LINE の結果は、それに対応した実行環境でないと
表示されませんが、SQL と同じように文字列として実行できます。

扱いは、UPDATE や INSERT のような結果の行を返さない実行です。
サーバーへ登録する時の記述の AS 以降を使い、AS を DECLARE に
変える事によって実行可能です。

定型的な処理は、引数を使って呼び出せるようにサーバーに登録しますが、
その時だけの運用的な処理では、このように実行するほうが現実的です。

また、サーバーで登録できない場合は、レスポンスに問題は出ますが、
文字列としてコードを実行毎に作成するというアプリケーションも
実際問題として良く使われているはずです。
DECLARE

	WK_CNT NUMBER := 0;

	CURSOR cur_main IS
		SELECT * FROM 社員マスタ where 社員コード >= '0021';

	社員_REC cur_main%ROWTYPE; 

	/* ファイルを扱う為の変数 */
	FILEHANDLE	UTL_FILE.FILE_TYPE;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN

	OPEN cur_main;
	/* ファイルを開く */
	FILEHANDLE := UTL_FILE.FOPEN( 'MYDIR', 'syain.csv', 'w' );
	LOOP
		FETCH cur_main INTO 社員_REC;
		EXIT when cur_main%NOTFOUND;

		WK_CNT := WK_CNT + 1;

		/* ファイルへ書き込む */
		UTL_FILE.PUT_LINE( FILEHANDLE, 
			社員_REC.社員コード
			||','||社員_REC.氏名
			||','||社員_REC.フリガナ
			||','||社員_REC.所属
			||','||社員_REC.性別
			||','||社員_REC.作成日
			||','||社員_REC.更新日
			||','||社員_REC.給与
			||','||社員_REC.手当
			||','||社員_REC.管理者
			||','||社員_REC.生年月日
		);

	END LOOP;
	CLOSE cur_main;
	/* ファイルを閉じる */
	UTL_FILE.FCLOSE( FILEHANDLE );

	DBMS_OUTPUT.PUT_LINE('更新件数:' || WK_CNT );

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
$if 1=1 $then
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
$end
END;
■ 関連する記事
Oracle : ディレクトリオブジェクト

■ 関連する Oracle ドキュメント
FOPENファンクション

タグ:Oracle
posted by at 2009-06-29 21:20 | スケルトン | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します