【问题标题】:Calling stored proc that has default value parameters调用具有默认值参数的存储过程
【发布时间】:2014-07-24 13:14:26
【问题描述】:

我有一个带有签名的存储过程

PROCEDURE store_cust_response(
    p_id NUMBER DEFAULT NULL, 
    p_camp_id NUMBER DEFAULT NULL, 
    p_offer_id NUMBER DEFAULT NULL
)

在 VBSCript 中创建参数时,是否必须为签名中的每个参数创建一个?如果是这样,我该如何调用它们的默认值?

Set conncmdA = CreateObject("adodb.command")
conncmdA.CommandText = "foo.store_cust_response"
conncmdA.CommandType = 4    'adCmdStoredProc
conncmdA.ActiveConnection = conntemp

conncmdA.Parameters.Append conncmdA.CreateParameter("p_id", adInteger, adParamInput, 4)
conncmdA.Parameters.Append conncmdA.CreateParameter("p_camp_id", adInteger, adParamInput, 4)
conncmdA.Parameters.Append conncmdA.CreateParameter("p_offer_id", adInteger, adParamInput, 4)

conncmdA.Parameters(0) = null
conncmdA.Parameters(1) = camp_id
conncmdA.Parameters(2) = offer_id

conncmdA.Execute
Set conncmdA = Nothing

【问题讨论】:

  • 您尝试过类似store_cust_response(p_id => 324) 的方法吗?如果您像这样调用该过程,p_camp_id 和 p_offer_id 将具有它们的默认值。您也可以像store_cust_response(p_id => 324, p_offer_id => 432) 一样调用,参数p_camp_id 将具有其默认值。
  • @zaratustra:我需要从 VBScript 调用存储的过程,请参阅我对原始帖子的编辑。
  • 您能告诉我们您是如何调用存储过程的吗?必须在您已经显示的代码上方再增加一行。
  • 全部在原帖中展示,其余为样板代码。为了完整起见,我将编辑原始帖子。
  • IIRC 默认值仅适用于从 PL/SQL 调用该过程的情况。 (我的理解是,如果 PL/SQL 中过程的特定调用不提供所有参数,PL/SQL 编译器会从数据字典中获取默认值)。如果您以其他方式调用该过程,则必须提供所有参数。至于“调用他们的默认值” - 你不能。您必须提供值,即使这些值与签名中的默认值相同。我想你也可以查询数据字典。祝你好运。

标签: oracle stored-procedures vbscript


【解决方案1】:

仅当从 PL/SQL 调用过程时才应用 IIRC 默认值。 (我的理解是,如果 PL/SQL 中过程的特定调用不提供所有参数,PL/SQL 编译器会从数据字典中获取默认值)。如果您以其他方式调用该过程,则必须提供所有参数。至于“调用他们的默认值” - 你不能。您必须提供值,即使这些值与签名中的默认值相同。我想您可以查询数据字典以获取默认值 - 类似于

SELECT a.DEFAULT_VALUE
  FROM SYS.DBA_ARGUMENTS a
  WHERE a.OBJECT_NAME = whatever AND
        a.ARGUMENT_NAME = whatever;

其中一个问题是 DBA_ARGUMENTS.DEFAULT_VALUE 是一个 LONG(类似于 BLOB,但处理起来更烦人),您必须获取和解释它。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多