[英]ORA-01704 error, insert string longer than 4000 chars
我正在使用PHP將數據插入Oracle數據庫。 有一個數據類型為CLOB的表字段,但它最多可插入4000個字符。 我在Google上做了一些搜索,發現PL / SQL可以在CLOB字段中插入4000多個字符。 然后,我計划使用Oracle觸發器解決我的問題。 我的計划是用PLSQL插入替換PHP插入查詢。
create or replace
TRIGGER EXTEND_CLOB
BEFORE INSERT ON T_SESSIONS
for each row
BEGIN
insert into t_sessions (id,data,expires) values ( :new.id, :new.data, :new.expires );
END;
該觸發器可以工作,但是它將插入2條記錄(觸發一次,PHP一次)。 無論如何,有沒有PHP來忽略查詢插入?
要插入較大的Clob,通常需要執行兩個步驟。
具有一個插入,該插入將一個空的Clob插入表中,並將Clob描述符返回到您的代碼,然后寫入該描述符。
我不是PHP編碼人員,但是我以前在其他語言中使用過這種模式。
我進行了一些搜索,您所需的代碼大致類似於下面的內容(由於我沒有PHP環境設置,因此我尚未對其進行測試)。
$conn = OCILogon('myusername', 'mypassword', 'mydatabase');
// Assumes a file has been uploaded you want to insert into a CLOB column
$lob = OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn, 'INSERT INTO MYCLOBTAB (C1, C2) VALUES('.$myid . ', EMPTY_CLOB()) RETURNING C2 INTO :C2');
OCIBindByName($stmt, ':C2', &$lob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
// The function $lob->savefile(...) reads from the uploaded file.
// If the data was already in a PHP variable $myv, the
// $lob->save($myv) function could be used instead.
if ($lob->savefile($_FILES['lob_upload']['tmp_name'])) {
OCICommit($conn);
}
oracle中的CLOB支持2GB的字符數據。
其他列(例如varchar2)僅支持4000。
我認為在您的情況下,不是CLOB填充並出現問題,而是您嘗試填充的另一列達到極限。
在上面的插入命令中,您將插入3列,但我認為所有這些都不是CLOB。
希望這會有所幫助,Alex
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.