【问题标题】:stored procedure, handle possible null value存储过程,处理可能的空值
【发布时间】:2019-08-31 04:58:59
【问题描述】:

我有一个非常简单的存储过程,当两个参数都是从表单输入发送的值时,它目前可以完美运行。

但是,如果 IN_NUMBER 值为空,我需要弄清楚如何处理,因为目标表中的该列设置为可为空。似乎该过程本身只是失败了,因为它正在等待一个值。

我应该改变什么?

输入参数:

IN_NAME 
IN_NUMBER

例行公事:

P1 : BEGIN ATOMIC

INSERT INTO schema . postings
( name
, postNumber)
VALUES
( IN_NAME
, IN_NUMBER) ;

END P1 

【问题讨论】:

  • 我不懂DB2,但你不能在过程中默认参数为NULL吗?
  • 我相信这实际上适用于 db2
  • 你是如何调用程序的?你得到什么错误?您想要接受 NULL 吗?
  • @IanBjorhovde 我只是得到一个一般的 500,因为它期望一个整数并得到一个空值,但是是的,我确实想接受空值,因为它并不总是必需的
  • 不存在“general 500”这样的db2错误。运行时遇到什么 db2 错误,比如说像 call myproc(‘myname’, null) 这样的 db2 语句?

标签: sql stored-procedures db2


【解决方案1】:

如果您想处理 NULL 并将其替换为其他值,请使用 NVL(IN_NUMBER, 0) - 当然,您可以将 0 交换为任何其他数字(我假设这是一个整数)。

【讨论】:

    【解决方案2】:

    例子:

    create table postings (name varchar(100), postNumber int) in userspace1@
    
    create or replace procedure postings (
      in_name varchar(100)
    , in_number int
    )
    P1 : BEGIN ATOMIC
    INSERT INTO postings
    ( name
    , postNumber)
    VALUES
    ( IN_NAME
    , IN_NUMBER) ;
    END P1@
    
    call postings('myname', null)@
    
    select * from postings@
    
    NAME   POSTNUMBER
    ----   ----------
    myname <null>
    

    如您所见,这里没有任何问题。
    在与此类似的情况下,您究竟遇到了什么 db2 错误?

    【讨论】:

    • 所以问题是,当我调用它时,我会像这样绑定参数:$stmt-&gt;bindParam(1,$campaignName, PDO::PARAM_STR); $stmt-&gt;bindParam(2,$groupNumber, PDO::PARAM_INT); 它给出了 sqlstate 22018: invalid character value for cast specification
    • 显示带有参数标记的调用语句文本。
    • 啊,我想通了,它是将空值作为空字符串而不是整数或空值发送
    猜你喜欢
    • 2021-11-22
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多