【发布时间】:2014-03-24 11:21:15
【问题描述】:
我尝试从 perl 将空值插入 Oracle 中的日期字段,但最终插入的是 sysdate,而不是空值。当我从 sqlplus 执行相同操作时,它会插入空值。
我的代码(只是重要的部分)
use DBI;
use DBD::Oracle qw(ORA_RSET);
...
eval {
$sth = $dbh->prepare(q{
INSERT INTO MY_TABLE
(VAL1, VAL2, VAL3, ENTRY_DATE, PROCESSED_DATE)
VALUES (?,?,?,?,?)});
my $rv = $sth->execute($VAL1, $VAL2, $VAL3, undef, undef);
$insert_counter++;
};
if ( $@ ) {
$FILE_PROCESS_STATUS = FILE_INVALID;
logg("e", "$@");
}
if ( $FILE_PROCESS_STATUS = FILE_VALID ) {
$dbh->commit;
}
【问题讨论】:
-
我建议您检查 PHP 如何处理空值。这里所做的是 PHP 正在向查询中添加绑定变量或占位符。
undef的使用 - 你确定 PHP 将undef的null值传递给日期字段吗? -
""而不是undef是一样的吗? -
Rachcha:正如描述和标签中提到的,它是 perl,而不是 php。 :) mpapec:基于 DBD::Oracle 的文档,我必须使用 undef,因为它是空值。 orafaq.com/wiki/Perl#DBD::Oracle_and_NULL_values
-
能否提供SQL*Plus执行的例子(insert语句的全栈和之后的选择结果)。它还提供表定义 DDL。