我的目标是将 CLOB 数据从数据库中检索到 Oracle Apex 应用程序中的 textarea 中,然后在按下“保存”按钮时将其从 textarea 本身保存到数据库中。我在此页面上还有一些其他字段(作为文本字段),它们是非 CLOB 字段,并且在单击按钮时也需要将它们保存在数据库中。
为此,我在页面的“HTML Header and Body Attribute”下使用了以下代码。这用于将 CLOB 检索/保存到 textarea/database 中。请注意,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();
}
我将“页面 HTML 正文属性”下的函数之一称为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;
这工作得很好。现在,我有一个 plsql 进程,它将在 CLOB 和非 CLOB 字段中输入的详细信息保存到数据库中。但是一旦页面提交,我就会收到“HTTP Bad Request”。
谁能解释为什么会发生这种情况,我该如何解决?