我编写了代码来插入用oracle pl / sql编写的调用参数化存储过程。我已正确地给出了所有参数,如下面的代码所示。
function CallSp(str_id, ref_no, note, userId, strdatestamp, writtenDate)
Dim strcon2 : set strcon2=server.createObject("ADODB.Connection")
Dim strcmd2
Dim sql2
Dim ReturnVal
strcon2.Open "Proper Connectionstring provided here"
sql2 = "Fr_Store_Notes"
Set strcmd2 = Server.CreateObject("ADODB.Command")
Set strcmd2.ActiveConnection = strCOn2
strcmd2.CommandText = sql2
strcmd2.CommandType = 4
strcmd2.Parameters.Refresh
strcmd2.Parameters.Append strcmd2.CreateParameter("p_str_id", 12,1)
strcmd2.Parameters("p_str_id") = str_id
strcmd2.Parameters.Append strcmd2.CreateParameter("p_ref_no", 12,1)
strcmd2.Parameters("p_ref_no") = ref_no
strcmd2.Parameters.Append strcmd2.CreateParameter("p_UserId", 12,1)
strcmd2.Parameters("p_UserId") = userId
strcmd2.Parameters.Append strcmd2.CreateParameter("p_note", 12,1)
strcmd2.Parameters("p_note") = note
strcmd2.Parameters.Append strcmd2.CreateParameter("p_Datestamp", 12,1)
strcmd2.Parameters("p_Datestamp") = strdatestamp
strcmd2.Parameters.Append strcmd2.CreateParameter("p_WrittenDate", 12,1)
strcmd2.Parameters("p_WrittenDate") = writtenDate
strcmd2.Parameters.Append strCmd2.CreateParameter("p_return", 3, 2)
strcmd2.Execute
ReturnVal = strcmd2.Parameters("p_return").Value
CallSp=ReturnVal
set strCmd2=Nothing
strCon2.close
end function
但我收到错误
行strcmd2.Execute
不支持参数类型
数据库存储过程如下所示,如果我们从数据库
执行它,则工作正常create or replace
procedure Fr_Store_Notes (
P_STR_ID IN VARCHAR2,
p_Ref_no in VARCHAR2,
P_UserId in VARCHAR2,
P_Note IN VARCHAR2,
P_datestamp IN VARCHAR2,
p_WrittenDate IN VARCHAR2,
p_return OUT number)
AS
BEGIN
--Expected Code Block is there and working fine
End;
任何人都可以帮我解决这个问题
答案 0 :(得分:1)
更新: - 显然经过一些研究(因为我不能与Oracle合作) ADODB不支持adVariant
(12
),您应该使用adVarChar
(200
)。
请参阅A: Classic ASP calling Oracle stored procedure with OraOleadb Driver
保留下面的答案,因为一旦解决了这个问题,它可能仍然有用。
原因是,一旦ADODB与连接定义的提供程序进行通信,特定错误通常是数据类型不匹配。
与您的ADODB.Command
对象相比,只是查看Oracle中的过程定义,我可以看到p_return
参数似乎不正确。我在previous answer到similar question进行了讨论。
根据Data Type Mapping (ADO中数据类型映射的绝佳资源) adInteger
(3
)地图在Oracle中Int
而不是Number
。相反,您应该使用adNumeric
(131
)来修复该特定错误。
尝试更改此行
strcmd2.Parameters.Append strCmd2.CreateParameter("p_return", 3, 2)
到
strcmd2.Parameters.Append strCmd2.CreateParameter("p_return", 131, 2)
METADATA
中使用global.asa
让ADO命名常量始终可供ASP Web应用程序使用)