2016-07-07 3 views
1

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을 만들려고했으나 작동하지 않습니다.

답변

1

APEX_COLLECTION은 세션이 만료 된 후에 자동으로 제거되는 테이블의 편리한 래퍼입니다.

귀하의 경우, 나는 키의 일부로 SESSION_ID를 사용하여 자체 테이블을 만들고이를위한 자체 제거 프로세스를 구현합니다.

+0

하지만 솔루션을 사용하면 동일한 페이지에서 둘 이상의 CLOB 필드를 어떻게 지원할 수 있습니까? –

+0

지금 당신을 왜 멈추게합니까? 귀하의 질문은 컬렉션에있는 하나의 clob의 한계에 관한 것입니다. 자체 테이블을 작성하면 여러 CLOB를 가질 수 있습니다. –

+0

나는이 한 페이지로 채워지고 수정 된 테이블을 가지고있다. 컬렉션을 사용하여 두 개의 CLOB 필드를 테이블에서로드/삽입합니다. 그리고 컬렉션은 하나의 CLOB 필드만을 지원하기 때문에 여기에 문제가 있습니다. 두 개의 CLOB 필드가있는 다른 테이블을 만드는 것이 어떻게 도움이 될지는 모르겠다. –

관련 문제