Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_text_in_plsql

Oracle Text für die Verarbeitung von Binären Dokumenten in PL/SQL verwenden

Einführung in 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 CTX_DOC Package eingesetzt werden.

Ein erstes Beispiel

Eine Filter Regel anlegen wie das Dokument verarbeitet werden soll:

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;
/

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.

-- 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;
/
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
prog/oracle_text_in_plsql.txt · Zuletzt geändert: 2016/04/25 22:12 von gpipperr