超过 4000 个字符给字符串文字太长误差在 oracle 上

标签: sql Oracle
发布时间: 2017/4/15 18:49:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我目前在 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;

这为我开枪蟾蜍时工作。 现在,我创建了一个存储的过程,并作为编译︰

    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');

解决方法 1:

看看这个:

declare
vClobVal varchar2(32767) := 'long text'
begin
update FMS_K_OFFICEWISE_LETTER set FKOL_LETTER_BODY=vClobVal 
where FKOL_OFFICEWISE_LETTER_ID=240;
end;

你确定这不支持?

官方微信
官方QQ群
31647020