0

Oracle ストアド プロシージャからデータを取得する必要があります。ストアド プロシージャは次のとおりです。

CREATE OR REPLACE PROCEDURE ATP_CONTRACT_SP
(
p_ContractNumber   IN   VARCHAR2,
p_ResultSet        OUT  ATPSP.cursorType
)
AS
BEGIN
OPEN p_ResultSet FOR
with t1 as (
select sc.c_ntp_no as ATP#, case when length(sc.c_proj_code) = 6 
...
from agt),
mt2 as (
select * from mt union select * from modagt
order by 3, 1 desc)
select mt2.atp#, mt2.llw#, '' as School, mt2.c_cont_type, mt2.approved, mt2.phase,          mt2.award, mt2.amendment,
mt2.totalaward, mt2.ATPApprvdOn,  mt2.rfp, mt2.balance, mt2.ctd_rfp
from mt2;
END;

アクセスコードは次のとおりです。

    Dim atpNumber As ADODB.Parameter, llwNumber As ADODB.Parameter, schoolString As ADODB.Parameter, _
    contractTypeString As ADODB.Parameter, approvedBool As ADODB.Parameter, _
    phaseString As ADODB.Parameter, awardNumber As ADODB.Parameter, _
    amendmentNumber As ADODB.Parameter, totalAwardNumber As ADODB.Parameter, _
    ATPApprovedOnDate As ADODB.Parameter, rfpNumber As ADODB.Parameter, _
    balanceNumber As ADODB.Parameter, ctd_rfpString As ADODB.Parameter

    Dim conn As ADODB.Connection
    Dim connString As String
    connString = "Driver={Microsoft ODBC for Oracle};DSN=xxx;UID=xxx;PWD=xxx;SERVER=xxx"
    Dim rsCommand As ADODB.Command
    Set rsCommand = New ADODB.Command

   Set atpNumber = rsCommand.CreateParameter("atp#", adVarChar, adParamOutput, 20)
   Set llwNumber = rsCommand.CreateParameter("llw#", adVarChar, adParamOutput, 20)
   Set schoolString = rsCommand.CreateParameter("School", adVarChar, adParamOutput, 20, Null)
   Set contractTypeString = rsCommand.CreateParameter("c_cont_type", adVarChar, adParamOutput, 20)
   Set approvedBoolString = rsCommand.CreateParameter("approved", adVarChar, adParamOutput, 2)
   Set phaseString = rsCommand.CreateParameter("phase", adVarChar, adParamOutput, 35)
   Set awardNumber = rsCommand.CreateParameter("award", adNumeric, adParamOutput)
   Set amendmentNumber = rsCommand.CreateParameter("amendment", adNumeric, adParamOutput)
   Set totalAwardNumber = rsCommand.CreateParameter("totalaward", adNumeric, adParamOutput)
   Set ATPApprovedOnDate = rsCommand.CreateParameter("ATPApprvdOn", adDate, adParamOutput)
   Set rfpNumber = rsCommand.CreateParameter("rfp", adNumeric, adParamOutput)
   Set balanceNumber = rsCommand.CreateParameter("balance", adNumeric, adParamOutput)
   Set ctd_rfpString = rsCommand.CreateParameter("ctd_rfp", adVarChar, adParamOutput, 255)

   rsCommand.Parameters.Append atpNumber
   rsCommand.Parameters.Append llwNumber
   rsCommand.Parameters.Append schoolString
   rsCommand.Parameters.Append contractTypeString
   rsCommand.Parameters.Append approvedBoolString
   rsCommand.Parameters.Append phaseString
   rsCommand.Parameters.Append awardNumber
   rsCommand.Parameters.Append amendmentNumber
   rsCommand.Parameters.Append totalAwardNumber
   rsCommand.Parameters.Append ATPApprovedOnDate
   rsCommand.Parameters.Append rfpNumber
   rsCommand.Parameters.Append balanceNumber
   rsCommand.Parameters.Append ctd_rfpString

   Set rsRecords = rsCommand.Execute

行にrsCommand.Executeエラー メッセージがあります: 複数ステップの OLEDB 操作でエラーが発生しました。私はこれに2日間取り組んできましたが、これを完了する必要があります。そして、技術的な挑戦に興味があります。

どこで間違っている可能性がありますか?

ご不明な点がございましたら、お気軽にお問い合わせください。

4

1 に答える 1

0

1 rsCommand プロパティを設定して Oracle プロシージャを指定したことがない

2 一連のパラメーターではなく、レコードセットを返します

1 つの入力パラメータ p_contractnumber advarchar が必要です 1 つの出力パラメータ P_resultset が必要です

于 2013-07-23T15:34:20.777 に答える