在Perl数据库操作中使用NULL值
未定义的值或undef用于在Perl的数据库操作中指示NULL值。您可以像使用非NULL值一样插入和更新NULL值的列。这些示例使用NULL值插入和更新列寿命-
$sth = $dbh->prepare(qq { INSERT INTO TEST_TABLE (FIRST_NAME, AGE) VALUES (?, ?) }); $sth->execute("Joe", undef);
这里的qq{}用于返回带引号的字符串以准备API。但是,在WHERE子句中尝试使用NULL值时必须小心。考虑-
SELECT FIRST_NAME FROM TEST_TABLE WHERE age = ?
将undef(NULL)绑定到占位符将不会选择具有NULL寿命的行!至少对于符合SQL标准的数据库引擎。为此,请参考数据库引擎的SQL手册或任何SQL书籍。要明确选择NULL,您必须说“WHEREageISNULL”。
一个常见的问题是让代码片段在运行时处理可以定义或未定义(非NULL或NULL)的值。一种简单的技术是根据需要准备适当的语句,并将占位符替换为非NULL情况-
$sql_clause = defined $age? "age = ?" : "age IS NULL"; $sth = $dbh->prepare(qq { SELECT FIRST_NAME FROM TEST_TABLE WHERE $sql_clause }); $sth->execute(defined $age ? $age : ());