作成者カテゴリ返答の対象
公開
matsumura
05/31/2001 11:44 AM
文書リンクアイコン Oracle8-PL/SQLでのデータ連携
ExecProcedure

utuさんこんにちは。

質問の答えになっていなくて申し訳ないのですが、
私もutuさんと同様の事を試して見た所、引数1つでは
実行できましたが、複数の引数を引き渡すとExecProcedureで
エラーとなってしまいました。

便乗で申し訳ないんですが、どなたか複数の引数受け渡しが
成功されている方いらっしゃいませんか?

ノーツのヘルプで「ExecProcedure メソッド (ODBCResultSet クラス)」を見ると、ストアードプロシージャ側への引数の受け渡し方は
どうやら2通り有りそうなのです。

※ヘルプより
status = odbcResultSet.ExecProcedure(procedureName$ [,arg1] [,arg2] ... [,arg30])
または
status = odbcResultSet.ExecProcedure(procedureName$, DB_PARAM_ARRAY, argArray)

※成功例
***********************************************************
//---<StoredProc>-----------------------------//
CREATE OR REPLACE PROCEDURE Test_cnt(rcnt OUT NUMBER)
IS
cnt NUMBER;
BEGIN
cnt := 0;
SELECT COUNT(*) into cnt FROM TESTTABLE;
rcnt := cnt;
EXCEPTION
WHEN NO_DATA_FOUND THEN
rcnt := -1;
END Test_cnt;
//---<notes>---------------------------------------------//
Dim con As ODBCConnection
Dim qry As ODBCQuery
Dim result As ODBCResultSet

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument

Dim vStat As Variant

'//---<ストアドプロシージャ引数>---//
Dim vCnt As Variant '/O NUMBER

Set uidoc = ws.CurrentDocument

'//---<設定>---//
Set con = New ODBCConnection
Set qry = New ODBCQuery
Set result = New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry

'//---<Oracle接続>---//
If Not con.ConnectTo("DNS","UserID","Password") Then
Messagebox "Could not connect",,"Error connecting"
Exit Sub
End If

'//---<ストアドプロシージャ実行>---//
vStat = result.ExecProcedure("Test_cnt",vCnt) ' OK!!

'//---<Oracle切断>--//
result.Close
con.Disconnect
***********************************************************

※その他、色々とテストした結果です。
***********************************************************
※引数1つ
[----- Oracle側 -----}
CREATE OR REPLACE PROCEDURE empno_exist_check(check_out out NUMBER)
END empno_exist_check;

[----- Notes側(引数渡し:通常) 成功 -----]
Dim vStat As Variant

'//---<ストアドプロシージャ引数>---//
Dim vCheck_out As Variant '/O NUMBER

'//---<ストアドプロシージャ実行>---//
vStat = result.ExecProcedure("empno_exist_check",vCheck_out)

[----- Notes側(引数渡し:配列) 成功 -----}
Dim vStat As Variant

'//---<ストアドプロシージャ引数>---//
Dim vStParam(0) As Variant '0: /O NUMBER

'//---<ストアドプロシージャ実行>---//
vStat = result.ExecProcedure("empno_exist_check",DB_PARAM_ARRAY,vStParam)
***********************************************************
※引数2つ
[----- Oracle側 -----}
CREATE OR REPLACE PROCEDURE empno_exist_check(check_out out NUMBER, check_out2 out NUMBER)
END empno_exist_check;
※Execute で実行し、Oracle上で正常に動作する事は確認済みです。

[----- Notes側(引数渡し:通常 エラー) -----}
Dim vStat As Variant

'//---<ストアドプロシージャ引数>---//
Dim vCheck_out As Variant '/O NUMBER
Dim vCheck_out2 As Variant '/O NUMBER

'//---<ストアドプロシージャ実行>---//
vStat = result.ExecProcedure("empno_exist_check",vCheck_out,vCheck_out2)
[----- Notes側(引数渡し:配列) エラー -----}
Dim vStat As Variant

'//---<ストアドプロシージャ引数>---//
Dim vStParam(1) As Variant '0: /O NUMBER 1: /O NUMBER

'//---<ストアドプロシージャ実行>---//
vStat = result.ExecProcedure("empno_exist_check",DB_PARAM_ARRAY,vStParam)


[Previous Main Document]
Oracle8-PL/SQLでのデータ連携 (utu)
. . ExecProcedureについて (utu)
. . . . ExecProcedure (matsumura) * 現在地 *
[Next Main Document]