CRUD 페이지, APEX (버전 5)의 양식이 있고 해당 테이블에 두 개의 CLOB 필드가 있습니다. 같은 페이지에서 두 필드를 모두 수정해야합니다. APOP_COLLECTION 컬렉션을 사용하는 CLOB 필드를로드하고 수정 된 값을 업데이트하는 매우 널리 알려진 해결책을 알고 있습니다.ORACLE APEX 5의 페이지에서 둘 이상의 CLOB 필드를 사용하는 방법
/** PL/SQL for loading the CLOB field */
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 DS_CONCLUSAO
into l_clob
from CR_RELATORIO
where ID_RELATORIO = :P15_ID_RELATORIO;
apex_collection.add_member(p_collection_name => 'CLOB_CONTENT',p_clob001 => l_clob);
end;
/** Javascript Functions for loading and setting the field on the page */
<script type="text/javascript">
function clob_set(campo, operacao){
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(campo,p.responseText);
$x_Hide('AjaxLoading');
apex.submit(operacao);
}else{return false;}
}
);
if (!apex.item(campo).isEmpty()) {
clob_ob._set($v(campo));
}
}
function clob_get(campo){
if ($v(campo) != null && $v(campo) != '') {
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(campo,p.responseText);
$x_Hide('AjaxLoading');
}else{return false;}
}
);
clob_ob._get();
}
}
</script>
미안 문제는이 솔루션을하지만, 를 사용하려고 : 해당 모음이 CLOB 필드에 대해 하나의 공간을 가지고 있으며, i는 DB에있는 두 개의 CLOB 필드 두 개 (또는 그 이상)의 공간이 필요합니다 테이블.
다른 이름으로 같은 페이지에 두 개의 서로 다른 APEX_COLLECTIONS을 만들려고했으나 작동하지 않습니다.
하지만 솔루션을 사용하면 동일한 페이지에서 둘 이상의 CLOB 필드를 어떻게 지원할 수 있습니까? –
지금 당신을 왜 멈추게합니까? 귀하의 질문은 컬렉션에있는 하나의 clob의 한계에 관한 것입니다. 자체 테이블을 작성하면 여러 CLOB를 가질 수 있습니다. –
나는이 한 페이지로 채워지고 수정 된 테이블을 가지고있다. 컬렉션을 사용하여 두 개의 CLOB 필드를 테이블에서로드/삽입합니다. 그리고 컬렉션은 하나의 CLOB 필드만을 지원하기 때문에 여기에 문제가 있습니다. 두 개의 CLOB 필드가있는 다른 테이블을 만드는 것이 어떻게 도움이 될지는 모르겠다. –