作成者カテゴリ 
公開
ノーツマン
06/28/2004 03:18 PM
エージェント
ノーツサーバノーツクライアントサーバOSクライアントOSネットワークプロトコル
6.x6.xWindows 2000 ServerWindows XP ProTCP/IP

Oracle PL/SQLプロシージャの配列パラメータ

はじめまして。
私はDECSのLCConnectionクラスを用いてNotesと別のOracle
サーバに用意したストアドプロシージャのI/O機能の作成を
行なっているのですが、Oracle側のストアドプロシージャ
のパラメータが単一の文字や数値のときは普通に動くのですが、
パラメータが配列となると引数の数または型が一致しないという
エラーが出てうまく動作しません。

以下がその一式ですが、何かよいサンプルがありましたら
教えて頂けないでしょうか。よろしくお願いいたします。

/* Oracleテーブル属性 */
SQLWKS> DESC desc_test
列名 NULL? 型
------------------------------ -------- ----
COL_CHAR VARCHAR2(5)
COL_NUM NUMBER
COL_DATE DATE

/* PL/SQLプロシージャ */

※K00SHONC.VCARRAY005はVARCHAR2型5文字の配列

create or replace Procedure decs_inserttest
(
I_COL_CHAR IN K00SHONC.VCARRAY005,
I_COL_NUM IN NUMBER,
I_COL_DATE IN DATE,
o_sqlcode OUT NUMBER, --エラーコード
o_sqlerrm OUT VARCHAR2, --エラーメッセージ
o_errinfo OUT VARCHAR2 --エラー箇所
) AS

BEGIN

o_errinfo := 'insert desc_test';
o_sqlcode := 0;
o_sqlerrm := ' ';

INSERT INTO desc_test
VALUES(
I_COL_CHAR(0),
I_COL_NUM,
I_COL_DATE
);

o_errinfo := '';

EXCEPTION
WHEN OTHERS THEN
o_sqlcode := SQLCODE;
o_sqlerrm := substr(SQLERRM(SQLCODE),1,100);

END decs_inserttest;

/* LutusScript */

Sub Initialize
'LotusConnectorセッション定義
Dim sess As New LCSession
Dim conn As New LCConnection ("oracle8")
Dim Parms As New LCFieldList
Dim Result As New LCFieldList
Dim ParmChar As New LCField (LCTYPE_TEXT,5)
Dim ParmNum As New LCField (LCTYPE_INT,1)
Dim ParmDate As New LCField (LCTYPE_DATETIME,1)
Dim o_sqlcode As New LCField (LCTYPE_INT,1)
Dim o_sqlerrm As New LCField (LCTYPE_TEXT,1)
Dim o_errinfo As New LCField (LCTYPE_TEXT,1)
Dim strTableName As String
Dim A(2) As String

On Error Goto ErrorProc

Print "Oracleへの接続..."
'Oracleへの接続...
If DECSConnect(conn,"kcc1","kcc1","kenpo") <> 0 Then
Print Str(Err) & ":" & Error$
conn.Disconnect
Exit Sub
End If

strTableName = "desc_test"
Print "対象テーブル排他制御..."
Call LockTable(conn,strTableName)

Print "Oracleプロシージャ初期設定..."
'ストアドプロシージャ利用宣言...
Call SetProcedure(conn,"kcc1", "decs_inserttest", "o_sqlcode,o_sqlerrm,o_errinfo")

A(0) = "AAAAA"
A(1) = "BBBBB"
A(2) = "CCCCC"
ParmChar.text = A
Set ParmChar = Parms.Append ("I_COL_CHAR", LCTYPE_TEXT)

Set ParmNum = Parms.Append("I_COL_NUM", LCTYPE_INT)
ParmNum.Value = 59

Set ParmDate = Parms.Append ("I_COL_DATE", LCTYPE_DATETIME)
ParmDate.Text = Cdat("1999/01/01")

count = Conn.Call (Parms, 1, Result)

'出力パラメータ参照...
Set o_sqlcode = Result.GetField (1)
Set o_sqlerrm = Result.GetField (2)
Set o_errinfo = Result.GetField (3)
Print "エラーコード:" & o_sqlcode.Value(0)
Print "エラーメッセージ:" & o_sqlerrm.Value(0)
Print "エラー箇所:" & o_errinfo.Value(0)

Exit Sub

ErrorProc:
Print Str(Err) & ":" & Error$
conn.Disconnect
Exit Sub
End Sub


[Previous Main Document]
Oracle PL/SQLプロシージャの配列パラメータ (ノーツマン) * 現在地 *
[Next Main Document]