Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_text_in_plsql

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
prog:oracle_text_in_plsql [2016/04/24 21:49] gpipperrprog:oracle_text_in_plsql [2016/04/25 22:12] (aktuell) – [Oracle Text für die Verarbeitung von Binären Daten in PL/SQL verwenden] gpipperr
Zeile 1: Zeile 1:
 +======Oracle Text für die Verarbeitung von Binären Dokumenten in PL/SQL verwenden=====
 +
 +Einführung in Oracle Text => [[dba:oracle_text|Oracle Text - Volltext Suche über Text Dokumente]]
 +
 +Neben der Hauptfunktion der Volltext Suche können die Oracle Text Feature auch in PL/SQL für das Arbeiten mit Binären Dokumente verwendet werden.
 +
 +Zum Beispiel einen Vorschauansicht eines binären Dokumentes wie MS Word in Oracle Apex darzustellen oder binäre Daten auszulesen und zu verarbeiten.
 +
 +Dazu kann sehr gut das [[https://docs.oracle.com/database/121/CCREF/cdocpkg.htm|CTX_DOC Package]] eingesetzt werden.
 +
 +===Ein erstes Beispiel===
 +
 +Eine Filter Regel anlegen wie das Dokument verarbeitet werden soll:
 +
 +<code sql>
 +begin
 +  -- create the policy for this example
 +  ctx_ddl.create_preference(preference_name => 'fast_filter'
 +                          , object_name  => 'AUTO_FILTER');
 +  
 +  ctx_ddl.set_attribute(preference_name  => 'fast_filter'
 +                      , attribute_name   => 'OUTPUT_FORMATTING'
 +                      , attribute_value  => 'FALSE');
 +  
 +  ctx_ddl.create_policy(policy_name      => 'GPI_FAST_POLICY' 
 +                      , filter           => 'fast_filter');
 +end;
 +/
 +</code>
 +
 +
 +Das Dokument lesen und verarbeiten, hier aus einen BFILE, das eigentliche Dokument liegt auf der Platte und wird mit den obigen Filtereinstellung in ein HTML Dokument gewandelt.
 +
 +<code sql>
 +-- read the data and classify
 +declare
 + -- The id of the test document
 +  v_doc_id number:=5541;
 +  v_doc_text clob;
 +  v_file_doc bfile;
 +  v_blob_doc blob;
 +  v_amount   integer := 32767;
 +  v_position integer := 1;
 +  v_buffer raw(32767);
 +begin
 +  -- read the bfile from the database
 +  select filepointer
 +  into v_file_doc
 +  from documents
 +  where id = v_doc_id;
 +  
 +  -- create a temporary CLOB to hold the document text
 +  dbms_lob.createtemporary(v_blob_doc, true, dbms_lob.session);
 +  
 +  -- read the bfile to the blob
 +  dbms_lob.open(v_file_doc, dbms_lob.lob_readonly);
 +  loop
 +    begin
 +      dbms_lob.read(v_file_doc, v_amount, v_position, v_buffer);
 +    exception
 +    when no_data_found then
 +      exit;
 +    end;
 +    dbms_lob.writeappend(v_blob_doc, v_amount, v_buffer);
 +    v_position := v_position + v_amount;
 +  end loop;
 +  dbms_lob.close(v_file_doc);
 +  
 +  --
 +  -- call ctx_doc.policy_filter to filter the BLOB to CLOB data
 +  --
 +  ctx_doc.policy_filter('GPI_FAST_POLICY', v_blob_doc, v_doc_text, false);
 +  
 +  
 +  -- Do now something with the pure TXT data of the document
 +  --
 +  dbms_output.put_line(substr(v_doc_text,1,4000));
 +  --
 +  --
 +
 +  --free the lob 
 +  dbms_lob.freetemporary(v_blob_doc);
 +end;
 +/
 +</code>
 +
  
prog/oracle_text_in_plsql.txt · Zuletzt geändert: 2016/04/25 22:12 von gpipperr