在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,您必须说“ WHERE age IS NULL”。

一个常见的问题是让代码片段在运行时处理可以定义或未定义(非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 : ());