我有一个如下所示的存储过程:
CREATE FUNCTION [my_schema].[isEligible]
(@product NUMERIC(8))
RETURNS INT
AS
BEGIN
DECLARE @result INT;
/* do eligibility checking, setting @result */
RETURN @result;
END;
在几个与此类似的现有查询中引用了这个:
SELECT *
FROM person
WHERE my_schema.isEligible(?) > -1 -- negative numbers are eligibility error codes
其中?
是给定产品ID的参数。
在调用该函数的几个查询之一中,我需要传入一个新的附加参数@exception
。我希望函数默认情况下像以前一样运行,并且只改变将传递@exception
值的一个调用的行为,所以我添加了新参数,如下所示:
CREATE FUNCTION [my_schema].[isEligible]
(@product NUMERIC(8),
@exception CHAR(1) = 'N')
RETURNS INT
AS
BEGIN
DECLARE @result INT;
/*
do eligibility checking (conditionally accounting for
@exception being 'Y'), and setting @result
*/
RETURN @result;
END;
但是当我部署新版本的函数并运行只传入@product
的查询时,我得到了An insufficient number of arguments were supplied for the procedure or function [my_schema].[isEligible]
。我认为添加= 'N'
会提供默认值并避免此问题。
我读过here,有时这个通用的声音错误实际上隐藏了其他不允许冒泡的错误,但我不知道是不是这样,因为它是在谈论程序,这是一个功能。不确定是否存在差异,或者函数是否不支持可选参数,例如过程。
如果可能的话,我很乐意不必为新参数传递NULL
,这将简化该功能更新版本的推出。有没有办法像isEligible(?)
和isEligible(?, ?)
那样调用此函数,还是需要第一个函数isEligible(?, NULL)
才能使用它?
答案 0 :(得分:1)
您可以将您的功能称为:
<script src="https://use.fontawesome.com/97dc0a8baa.js"></script>
<div class="contact-container">
<div class="item">
<div class="box">
<div class="inner">
<div class="copy"> <i class="fa fa-mobile-phone"></i>
<h3 class="sppb-addon-title sppb-feature-box-title sppb-media-heading"><a href="tel:+37068713383">+1 123 45 678 99</a></h3></div>
</div>
</div>
</div>
<div class="item">
<div class="box">
<div class="inner">
<div class="copy"> <i class="fa fa-envelope-o"></i>
<h3 class="sppb-addon-title sppb-feature-box-title sppb-media-heading"> <span>info@info.com</span></h3></div>
</div>
</div>
</div>
<div class="item">
<div class="box">
<div class="inner">
<div class="copy"> <i class="fa fa-map-marker"></i>
<h3 class="sppb-addon-title sppb-feature-box-title sppb-media-heading">City, Street 22</h3></div>
</div>
</div>
</div>
<div class="item">
<div class="box">
<div class="inner">
<div class="copy"> <i class="fa fa-calendar"></i>
<h3 class="sppb-addon-title sppb-feature-box-title sppb-media-heading">I-V 09:00-17:00<br> VI 09:00-14:00<br>VII closed</h3></div>
</div>
</div>
</div>
</div>
和
SELECT *
FROM person
WHERE my_schema.isEligible(?, default) > -1