- PR -

ASP からOracleのストアドを実行する方法について

投稿者投稿内容
しぃ
会議室デビュー日: 2005/07/01
投稿数: 13
投稿日時: 2005-11-03 18:02
お世話になります。
ASP初心者です。

■環境
 ASP
 IIS5.1
 Oracle9i

現在ASPからOracleのストアドプロシージャを実行したく作業中です。

しかし、パラメーターを設定する箇所でエラーとなります。
今回初めてASPからのストアド実行をやったため、方法・エラー内容が不明です。

どなたかご存知でしたらよろしくお願い致します。

※ エラー箇所はASPの
  cmd.Parameters.Append cmd.CreateParameter 部分です。

■ ASP ---------------

Set con = Server.CreateObject("ADODB.Connection")
con.Open "TESTDB", "testus", "testps"

'// コマンドオブジェクト
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandType = 4
cmd.CommandText = "sample_procedure"

'-- param 1
cmd.Parameters.Append cmd.CreateParameter("in_userid", adChar, adParamInput)
cmd.Parameters("in_userid").Value = "id_123"
'-- param 1
cmd.Parameters.Append cmd.CreateParameter("in_passwd", adVarChar, adParamInput)
cmd.Parameters("in_passwd").Value = "pw_123"

cmd.Parameters.Append cmd.CreateParameter("out_result", adVarChar, adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("out_name", adVarChar, adParamOutput) 
 ・
 ・
■ PL/SQL ---------------
CREATE OR REPLACE PROCEDURE sample_procedure
(
in_userid IN CHAR,
in_passwd IN VARCHAR2,
out_result OUT VARCHAR2,
out_name OUT VARCHAR2
) IS
 ・
 ・

■ エラー内容---------------
エラー タイプ
ADODB.Command (0x800A0BB9)
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-03 18:49
引用:

しぃさんの書き込み (2005-11-03 18:02) より:

cmd.Parameters.Append cmd.CreateParameter("in_userid", adChar, adParamInput)


エラー内容からすると、タイプが間違っているか、容量を超えているからしいですが、
とりあえず、Parameter と分解しないと原因がはっきりしません。

コード:

    Dim hParam1 As ADODB.Parameter
    Set hParam1 = cmd.CreateParameter("in_userid", adChar, adParamInput)

    hParam1.Value = "id_123"

    Call cmd.Parameters.Append(hParam1)


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
しぃ
会議室デビュー日: 2005/07/01
投稿数: 13
投稿日時: 2005-11-03 19:21
返信ありがとうございます。

指示いただいたとおり分けて実行したところ

 Set hParam1 = cmd.CreateParameter("in_userid", adChar, adParamInput)

でエラーとなりました。
メッセージは同じものです。

型の設定が不正なのでしょうか?
しかし、ストアド側はCAHRで設定しており、ASP側でもCHARで設定しております。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-03 20:18
引用:

しぃさんの書き込み (2005-11-03 19:21) より:

型の設定が不正なのでしょうか?
しかし、ストアド側はCAHRで設定しており、ASP側でもCHARで設定しております。


VARCHAR ではないんですね... って、ストアド名から確認してるとも思えませんが...
以下の通りにやれば、普通はできるハズなのですが...

  Append、CreateParameter メソッドの例 (VB)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2005-11-03 20:56

こんばんわ

cmd.CreateParameter("in", adChar, adParamInput, 10)
というように文字列の長さがいると思います(固定長なんで)。
VarChar2の場合はいらないです。

以上
しぃ
会議室デビュー日: 2005/07/01
投稿数: 13
投稿日時: 2005-11-03 21:47
返信ありがとうございます。

以下の通り修正し、実行してもやはり同じエラーが表示されました。

 cmd.CreateParameter("in", adChar, adParamInput, 10)

 ※PL/SQL側をVARCHAR2に変更し、ASP側でadVarCharを設定しても通りませんでした。

じゃんぬねっとさんから教えていただいたHPを確認しました。
やはり実行方法は間違ってなさそうですね・・・。
しかし・・・エラーが発生しており、何か設定が足りいかPL/SQL側が足りないのでしょうか・・・。

よろしくお願い致します。
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2005-11-03 22:01

cmd.CreateParameter("in", 129, 1, 10)とかはどうですか。
ASPということなんで、インクルードしてるかなーと思いまして。

私はAccess2003から試しましたが、問題なく動作します。

以上
しぃ
会議室デビュー日: 2005/07/01
投稿数: 13
投稿日時: 2005-11-03 22:18
エラーなくなりました。

ゆいたんさんに教えていただいたとおり、直接コード指定で実行したところ
エラーがなくなりました。
ありがとうございました。


インクルードをしているか、との記述がありましたが・・・何かインクルード
しなければいけないのでしょうか?

それと、ご面倒でなければコード一覧がわかるHPをご存知でしたら教えていただけ
ないでしょうか?

よろしくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)