Sql 存储过程,处理可能的空值

Sql 存储过程,处理可能的空值,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,我有一个非常简单的存储过程,当这两个参数都从表单输入发送值时,它目前可以完美地工作 但是,如果该值为空,我需要弄清楚如何处理IN_NUMBER,因为目标表中的该列被设置为可空。似乎过程本身就是失败的,因为它正在等待一个值 我应该换什么 在参数中: IN_NAME IN_NUMBER 例行程序: P1 : BEGIN ATOMIC INSERT INTO schema . postings ( name , postNumber) VALUES ( IN_NAME , IN_NUMBER)

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

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

我应该换什么

在参数中:

IN_NAME 
IN_NUMBER
例行程序:

P1 : BEGIN ATOMIC

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

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

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

示例:

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错误?

示例:

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错误?

我不懂db2,但您不能在过程中将参数默认为NULL吗?我相信这对db22来说是可行的。您如何调用该过程?您得到的错误是什么?你想接受空值吗?@IanBjorhovde我只是得到一个普通的500,因为它需要一个整数并得到一个空值,但是是的,我确实想接受空值,因为它并不总是必需的。没有像“普通500”这样的db2错误。当您运行一个db2语句(比如call myproc'myname',null)时,您会遇到什么db2错误?我不懂db2,但是您不能在过程中将参数默认为null吗?我相信这对db2proc实际有效。您如何调用该过程?您得到的错误是什么?你想接受空值吗?@IanBjorhovde我只是得到一个普通的500,因为它需要一个整数并得到一个空值,但是是的,我确实想接受空值,因为它并不总是必需的。没有像“普通500”这样的db2错误。比如说,当运行call myproc'myname',null这样的db2语句时,会出现什么db2错误?所以问题是,当我调用它时,我绑定了如下参数:$stmt->bindParam1,$campatigname,PDO::PARAM_STR;$stmt->bindParam2,$groupNumber,PDO::PARAM_INT;它为cast规范提供了sqlstate 22018:invalid character value显示带有参数标记的调用语句文本。啊,我发现它是以空字符串的形式发送空值,而不是整数或null。问题是,当我调用它时,我绑定了如下参数:$stmt->bindParam1,$campaigname,PDO::PARAM_STR;$stmt->bindParam2,$groupNumber,PDO::PARAM_INT;它为cast规范提供了sqlstate 22018:invalid character value显示带有参数标记的调用语句文本。啊,我发现它是以空字符串的形式发送空值,而不是整数或null