2013-10-16 21 views
1

我有一個Oracle數據庫,需要在YYYY-MM-DD中插入一個包含日期的字符串HH :MM:SS格式轉換爲Oracle時間戳字段。爲此,我寫了這個代碼:PHP:oci_bind_by_name和timestamp字段導致「ORA-01461:只能綁定一個LONG值,只能插入一個LONG列」

$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: can bind a LONG value only for insert into a LONG column

已經有大量關於堆棧溢出的ORA-01461問題,但我找不到解決這個問題的方法。我真的不明白的地方在這個星座LONG進來

回答

2

從(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); 
?> 
相關問題