お世話になります。
以下のようにOracleにてストアドプロシージャを作成して、
それをAccessからコールしております。
そしてそのDBMS_OUTPUTの結果をファイル出力したいのですが、
試しに「sqlstmt = "BEGIN proc_SeikyuMeisai(:yyyymm); END;"」の部分を
「sqlstmt = "spool aaa.csv BEGIN proc_SeikyuMeisai(:yyyymm); END; spool off"」
や、ストアド側でspoolしてみましたがダメでした。
UTL_FILEを使うしかないのでしょうか?
ご存じの方おられたらご教示いただけますでしょうか?
宜しくお願い致します。
【Access2003側】
' セッションの作成
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'データベースへの接続
Set OraDatabase = OraSession.OpenDatabase("Hoge", "hoge/hoge", ORADB_DEFAULT)
'■ ストアド実行 ■
sqlstmt = "BEGIN proc_SeikyuMeisai(:yyyymm); END;"
'バインド変数の設定
OraDatabase.Parameters.Add "yyyymm", 0, ORAPARM_INPUT
OraDatabase.Parameters("yyyymm").serverType = ORATYPE_NUMBER
'引数設定
OraDatabase.Parameters("yyyymm").value = Forms!F月次データ取込.txt日付1
'SQL文の実行
OraDatabase.ExecuteSQL sqlstmt
DoCmd.Hourglass False '砂時計
'バインド変数の削除
OraDatabase.Parameters.Remove "yyyymm"
'■ORACLEへの切断■
OraDatabase.Close
'オブジェクトの破棄
Set OraDatabase = Nothing
Set OraSession = Nothing
MsgBox "正常に出力されました。"
【Oracle10g】
Create or replace procedure Proc_SeikyuMeisai (
P1_YYYYMM IN number
)
IS
WK_KANID varchar2(10);
WK_CODE varchar2(6);
WK_SUU varchar2(12);
WK_TEN varchar2(9);
WK_KAI varchar2(2);
-- カーソルタイプの定義
TYPE typeMyCursor IS REF CURSOR;
-- カーソル変数の定義
curSeikyutypeMyCursor;
curID varchar2(10);
curMAX number;
curMEISAI varchar2(1000);
curTEN number;
curKAI number;
vSql varchar2(1000);
BEGIN
vSql := 'select KANNO, MEISAI_MAX, _MEISAI, HOU_TENSUU_KEI, TOTAL_KAISUU from SEIKYUUMEISAI' || P1_YYYYMM;
-- カーソルオープン
open curSeikyu for vSql;
loop
fetch curSeikyu into curID, curMAX, curMEISAI, curTEN, curKAI;
exit when curSeikyu%NOTFOUND;
WK_KANID := curID;
for nLpCnt IN 1..curMAX loop
WK_CODE := substrb(curMEISAI, 3, 6);
WK_SUU := substrb(curMEISAI, 34, 12);
WK_TEN := substrb(curMEISAI, 89, 9);
WK_KAI := lpad(curKAI, 2, 0);
dbms_output.put_line(WK_KANID || ',' || WK_CODE || ',' || WK_SUU || ',' || WK_TEN || ',' || WK_KAI);
end loop;
end loop;
end;
/
No.1ベストアンサー
- 回答日時:
SPOOLは、SQL*Plusの命令なので
SQL*Plusを使わずに実行している
>Accessからコール
のときは使えません。
>UTL_FILEを使うしかないのでしょうか?
その通り、UTL_FILEを使ってください。
No.3
- 回答日時:
#2 のmuyoshid です。
済みません。
訂正します。
#1 の方がおっしゃられている通り、Stored Procedure の中でファイル
出力させたい場合は、UTL_FILE パッケージを使用する必要があります。
DBMS_OUTPUT は単に画面に出力するだけで、spool はSQL*Plus の機能です。
No.2
- 回答日時:
こんにちわ。
> UTL_FILEを使うしかないのでしょうか?
loop に入る前に、dbms_output.enable(NULL) を実行してみて下さい。
詳細は、PL/SQL のパッケージリファレンスをどうぞ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアドプロシジャからストア...
-
パッケージ内のファンクション...
-
INSERT文の書式
-
Access VBAで行ラベルが定義さ...
-
ODBCリンクの際にACCESSでは読...
-
Statement ignored というエラー
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
-
キャッシュを使わずにSELECTを...
-
今日の日付が入った行のデータ...
-
WHERE句の実行順序
-
sqlplusでヘッダーが付かない
-
エクセル 日付による並べ替え...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
百の位での四捨五入について
-
エクセル上の 2017/10/27 7:01...
-
アクセスのクエリ フィールド...
-
Texの枠囲み調節
-
日付の切り出し方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ストアドプロシジャからストア...
-
時間項目を60進数から10進数へ...
-
PL/SQL exceptionを呼び出すには?
-
PL/SQL 実行中のSID
-
ストアド実行時のエラー「参照...
-
ROW_NUMBER()を使用したデータ取得
-
ストアドプロシージャからアナ...
-
質問:DBMS_OUTPUTの使用方法
-
パッケージ内のファンクション...
-
PL/SQLについて
-
GET_DDLについて
-
Oracle: PACKAGE BODY の分割
-
ストアドプロシージャからスト...
-
PL/SQLで連結(||)と結合(=>)の違い
-
OracleのTEXT_IOについて
-
プロシージャ 引数 指定
-
PL/SQLの例外
-
PL/SQLに関して
-
INSERT文の書式
-
ストアドプロシージャ結果のフ...
おすすめ情報