/*    .  */
create or replace procedure P_GRIDTEMP_BASE_INSERT_REPL
(
  nCOMPANY          in number,      --   
  nCRN              in number,
  sCODE             in varchar2,
  sNAME             in varchar2,
  nTEMPLTYPE        in number,
  nRN               in out number
)
as
  nRN1          GRIDTEMPLATES.RN%TYPE;
  nVERSION      GRIDTEMPLATES.VERSION%TYPE;
  nRN2          number;

  bTEMPLATE     CLOB := null;
  sDEF_TEMPLATE varchar2(500) := '<TEMPLATE>'||
                                    '<FIXEDCOLS>1</FIXEDCOLS>'||
                                    '<FIXEDROWS>1</FIXEDROWS>'||
                                    '<PARAMS>011011</PARAMS>'||
                                    '<COLS>'||
                                      '<COL>'||
                                         '<NUMBER>1</NUMBER>'||
                                         '<SIZE><VALUE>64</VALUE></SIZE>'||
                                      '</COL>'||
                                    '</COLS>'||
                                    '<ROWS>'||
                                      '<ROW>'||
                                         '<NUMBER>1</NUMBER>'||
                                         '<SIZE><VALUE>24</VALUE></SIZE>'||
                                      '</ROW>'||
                                    '</ROWS>'||
                                 '</TEMPLATE>';
begin

  /*   */
  FIND_VERSION_BY_COMPANY( nCOMPANY,'GridTemplates',nVERSION );

  /*    */
  nRN1 := gen_id;       --  "" 

  /*     */
  insert
    into GRIDTEMPLATES( RN,VERSION,CRN,CODE,NAME,TEMPLTYPE,XML )
    values( nRN1,nVERSION,nCRN,sCODE,sNAME,nTEMPLTYPE, empty_clob());

  if nRN is null then
    /*  XML     */
    dbms_lob.createtemporary(bTEMPLATE, true);
    dbms_lob.writeappend(bTEMPLATE, length(sDEF_TEMPLATE), sDEF_TEMPLATE);
    update GRIDTEMPLATES
       set XML = bTEMPLATE
     where RN = nRN1;
    dbms_lob.freetemporary(bTEMPLATE);

    P_GRTMPLROWSCOLS_BASE_INSERT(nCOMPANY, nRN1, 1, 0, nRN2);
    P_GRTMPLROWSCOLS_BASE_INSERT(nCOMPANY, nRN1, 1, 1, nRN2);
  else

    for cGRTMPLROWSCOLSrec in (select * from GRTMPLROWSCOLS where PRN = nRN) LOOP
      P_GRTMPLROWSCOLS_BASE_INSERT(nCOMPANY, nRN1, cGRTMPLROWSCOLSrec.ORDERNUMBER,
         cGRTMPLROWSCOLSrec.SIGN, nRN2);
    end LOOP;

  end if;

  /*     */
  nRN := nRN1;
end;
/
show errors procedure P_GRIDTEMP_BASE_INSERT_REPL;
