BIP – XML clob jako źródło danych do raportu w BIP/XML Publisher

Witam,

Mamy tablę która ma kolumnę CLOB. W kolumnie jest xml który może posłużyć nam do raportu w BIP( nie musimy robić żadnych sqli w xmlu mamy wszystkie dane do raportu).
1. Rejestrujemy źródło danych jako pakiet pl/sql
2. W źródle danych mamy procedure która nam pobiera xmla i generuje go na wyjscie raportu.

Informacje o pozostałym setupu znajdziemy http://ora-apps.blogspot.com/2007/10/pl-sql-stored-procedure-xml-publisher.html

PROCEDURE xx_sra_gen_pdf(p_error_code               OUT NUMBER,
                           p_error_msg                OUT VARCHAR2,
                           p_payment_instruction_id   IN NUMBER,
                           p_payment_reference_number IN NUMBER) IS
    l_payment    CLOB;
    l_xml        CLOB;
    l_end        NUMBER;
    l_clob_size  INTEGER;
    l_offset     INTEGER := '1'; --idziemy od 1 znaku XMLa
    l_chunk_size INTEGER := '28000'; -- wycinamy  28000 powinno być 32K 
--nie ma substb dlatego jest ich mniej
 
  BEGIN
    FND_FILE.PUT_line(FND_FILE.LOG,
                      'p_payment_instruction_id ' ||
                      p_payment_instruction_id);
    FND_FILE.PUT_line(FND_FILE.LOG,
                      'p_payment_reference_number ' ||
                      p_payment_reference_number);
    --wlaczenie zabeczpieczen by moc odczytac dane z tabeli iby_xml_fd_pmt_1_0_v
    cep_standard.init_security; -- inicjowanie zabezpieczen dla zobowizan.
    SELECT XMLTYPE.getClobVal(payment)
      INTO l_payment
      FROM iby_xml_fd_pmt_1_0_v
     WHERE payment_instruction_id = p_payment_instruction_id
       AND payment_reference_number = p_payment_reference_number;
 
    l_clob_size := dbms_lob.getlength(l_payment);
    -- FND_FILE.PUT_line(FND_FILE.LOG, 'Rozmiar l_clob_size ' || l_clob_size);
 
    WHILE (l_clob_size > 0) LOOP
 
 
      l_xml := dbms_lob.substr(l_payment, l_chunk_size, l_offset);
      l_end := instr(l_xml, '>', -1);
      l_xml := dbms_lob.substr(l_payment, l_end, l_offset);
      FND_FILE.PUT_line(FND_FILE.OUTPUT, l_xml);
      l_chunk_size := l_end;
      l_clob_size  := l_clob_size - l_chunk_size;
      l_offset     := l_offset + l_chunk_size;
    END LOOP;
  EXCEPTION
    WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.put_line('TO_MANY_ROWS' || SQLERRM);
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.put_line('NO_DATA_FOUND' || SQLERRM);
    WHEN OTHERS THEN
      DBMS_OUTPUT.put_line('EXCEPTION WHEN OTHERS THEN' || SQLERRM);
  END xx_sra_gen_pdf;

Pozdrawiam,
Luko

Ten wpis został opublikowany w kategorii PLSQL, XML Publisher. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz