首页 > 解决方案 > 传递布尔值的问题 - VBA ADODB Oracle 存储过程

问题描述

尝试使用 ADODB 执行 Oracle 存储过程。在将布尔值添加到过程之前没有问题。我认为问题出在 CreateParameter adBoolean DataTypeEnum 上。

错误:调用 WEIGH_PACKAGE_PR 中的参数数量或类型错误

甲骨文

PROCEDURE WEIGH_PACKAGE_PR
    (in_action_code         IN NUMBER,
     in_pass_num            IN NUMBER,
     in_cont_no             IN VARCHAR2,
     in_scale_id            IN VARCHAR2,
     in_current_user        IN NUMBER,
     in_bypassnumber        IN NUMBER,
     in_override_tarewt     IN BOOLEAN)

VBA

With db
  If .state = adStateClosed Then
   .ConnectionString = conStr
   .CursorLocation = adUseClient
   .Open
  End If
End With

With cmd
  .ActiveConnection = db
  .NamedParameters = True
  .CommandType = adCmdStoredProc
  .CommandText = "COMMON_SCALES_PK.WEIGH_PACKAGE_PR"
  .Parameters.Append .CreateParameter("in_action_code", adBigInt, adParamInput, , 1)
  .Parameters.Append .CreateParameter("in_pass_num", adBigInt, adParamInput, , 1)
  .Parameters.Append .CreateParameter("in_cont_no", adVarChar, adParamInput, 10, "I658638002")
  .Parameters.Append .CreateParameter("in_scale_id", adVarChar, adParamInput, 6, "T05R02")
  .Parameters.Append .CreateParameter("in_current_user", adBigInt, adParamInput, , 3737)
  .Parameters.Append .CreateParameter("in_bypassnumber", adBigInt, adParamInput, , Null)

  .Parameters.Append .CreateParameter("in_override_tarewt", adBoolean, adParamInput, 1, False)

 Set rst = .Execute()

End With

标签: excelvbaoraclestored-proceduresadodb

解决方案


在 Oracle 12.1 之前,不能将 PL/SQL 数据类型用作绑定值,请参阅Oracle Database 12c 第 1 版 (12.1) 中的更改

ADODB 驱动程序也必须支持这样的数据类型。

您既没有告诉我们您使用的是哪个 Oracle 版本,也没有告诉我们使用哪个 ADODB 驱动程序。如果您仍然使用古老的 Microsoft 提供程序MSDAORA,那么它肯定不适用于 BOOLEAN 值。


推荐阅读