私の目的は、CLOB データをデータベースから Oracle Apex アプリケーションのテキストエリアに取得し、[保存] ボタンを押すとテキストエリア自体からデータベースに保存できるようにすることです。このページには、CLOB フィールド以外の他のフィールド (テキストフィールドとして) もあり、ボタンをクリックしたときにデータベースにも保存する必要があります。
このために、ページの「HTML ヘッダーと本文の属性」の下に次のコードを使用しています。これは、CLOB をテキストエリア/データベースに取得/保存するために使用されます。Apex アイテム内の単純な PLSQL コードは、ここで行っていることを実行するのに十分ですが、CLOB データが 32k バイト未満の場合のみです。この関数を使用しているのは、apex の plsql の 32k 制限 (および sql を使用する場合の 4k 制限) のためです。
function clob_set(){
var clob_ob = new apex.ajax.clob(
function(){
var rs = p.readyState
if(rs == 1||rs == 2||rs == 3){
$x_Show('AjaxLoading');
}else if(rs == 4){
$s('P5075_RESPONSETEXT',p.responseText);
$x_Hide('AjaxLoading');
}else{return false;}
}
);
if(!$v_IsEmpty('P5075_STYLESHEET')){clob_ob._set($v('P5075_STYLESHEET'))};
}
function clob_get(){
var clob_ob = new apex.ajax.clob(
function(){
var rs = p.readyState
if(rs == 1||rs == 2||rs == 3){
$x_Show('AjaxLoading');
}else if(rs == 4){
$s('P5075_STYLESHEET',p.responseText);
$x_Hide('AjaxLoading');
}else{return false;}
}
);
clob_ob._get();
}
"Page HTML Body Attribute" の下にある関数の 1 つをonload = "javascript:clob_get();"として呼び出しています。
これにはヘッダー処理後の PLSQL があります。
declare
l_clob clob:= empty_clob();
begin
if apex_collection.collection_exists(p_collection_name=>'CLOB_CONTENT') then
apex_collection.delete_collection(p_collection_name=>'CLOB_CONTENT');
end if;
apex_collection.create_or_truncate_collection(p_collection_name=>'CLOB_CONTENT');
dbms_lob.createtemporary( l_clob, false, dbms_lob.SESSION );
SELECT xslt
INTO l_clob
FROM schematransform
WHERE namn = 'f';
apex_collection.add_member(p_collection_name => 'CLOB_CONTENT',p_clob001 => l_clob);
end;
これはうまく機能しています。現在、CLOB および非 CLOB フィールドに入力された詳細をデータベースに保存する plsql プロセスがあります。しかし、ページが送信されるとすぐに、「HTTP Bad Request」が表示されます。
なぜこれが起こっているのか、どうすれば解決できるのか、誰か説明してもらえますか?