【发布时间】:2012-12-06 13:58:54
【问题描述】:
我目前在 Codeigniter 上使用 oci8 驱动程序。 在更新将包含超过 4000 个字符的字段时,我收到了一个错误:
ORA-01704: string literal too long
所以,通过几个博客,我得到了这个:
declare
vClobVal varchar2(32767) := 'long text'
begin
update FMS_K_OFFICEWISE_LETTER set FKOL_LETTER_BODY=vClobVal
where FKOL_OFFICEWISE_LETTER_ID=240;
end;
当我向 Toad 开除时,这对我有用。 现在,我创建了一个存储过程并编译为:
CREATE OR REPLACE PROCEDURE FMIS3.UPDATE_LETTER_BODY ( body_text IN FMS_K_OFFICEWISE_LETTER.FKOL_LETTER_BODY%type,condition_id in FMS_K_OFFICEWISE_LETTER.FKOL_OFFICEWISE_LETTER_ID%type)IS
begin
update FMS_K_OFFICEWISE_LETTER set FKOL_LETTER_BODY=body_text
end;
这对于超过 4000 个字符再次不起作用。我不能定义 varchar2 的大小,因为它给了我错误。有什么建议吗?
即使尝试通过绑定参数使用 PDO,也只能在字符串大小小于 4000 个字符时起作用:(
$conn = new PDO("oci:dbname=".$this->db->hostname,$this->db->username,$this->db->password);
$params = array(
':body_text' => "Long String"
);
$sth = $conn->prepare("update FMS_K_OFFICEWISE_LETTER set FKOL_LETTER_BODY = :body_text
where FKOL_OFFICEWISE_LETTER_ID=241");
$sth->execute($params) or die('error occured');
【问题讨论】:
-
这个问题和this other one of yours有什么区别?
-
@Lord Peter : 数据类型设置为 CLOB
标签: sql database oracle plsql pdo