我有一个 Oracle 数据库,需要在 Oracle 时间戳字段中插入一个带有 YYYY-MM-DD HH:MM:SS 格式日期的字符串。为此,我编写了以下代码:
$date = '2013-01-01 10:10:10';
$sql = oci_parse($c,"INSERT INTO MY_TABLE (ID, SEND_DATE) VALUES (MY_SEQ.nextval, TO_TIMESTAMP(:send_date, 'YYYY-MM-DD HH24:MI:SS'))");
oci_bind_by_name($sql, ':send_date', $date, null, SQLT_CHR);
oci_execute($sql);
该表如下所示:
CREATE TABLE "MY_TABLE"
( "ID" NUMBER NOT NULL ENABLE,
"SEND_DATE" TIMESTAMP (0) NOT NULL ENABLE );
如果我执行上面的查询,则会收到此错误:
堆栈ORA-01461:只能绑定长整型值以插入长整型列
溢出上已经有很多关于ORA-01461的问题,但我找不到这个特定问题的解决方案。我真的不明白LONG在这个星座中的位置。
from (http://www.php.net/manual/en/function.oci-bind-by-name.php#92334) :
有时您会收到错误"ORA-01461:只能绑定 LONG 值以插入到 LONG 列中"。 此错误具有高度误导性,尤其是当您没有 LONG 列或 LONG 值时。
从我的测试来看,当绑定变量的值超过分配的长度时,似乎会导致此错误。
为避免此错误,请确保在绑定变量时指定长度,例如
<?php
oci_bind_by_name($stmt,':string',$string, 256);
?>
对于数字,使用默认长度(-1),但告诉oracle它是一个整数,例如
<?php
oci_bind_by_name($stmt,':num',$num, -1, SQLT_INT);
?>