私は現在、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');