ORACLE BLOB-DATEI

Schreibe ich einige pl/sql generieren Sie pdf-reports gespeichert werden als blobs in einer oracle-Tabelle. Ich brauche eine Schleife durch diese Tabelle hat eine Spalte mit dem Namen und der blob und schreiben Sie die blob-Daten in das OS als eine Datei mit dem entsprechenden Dateinamen in der Tabelle. Ich habe so ziemlich abgeschlossen haben, diesen code, aber bin läuft in einen Haken:

ORA-06550: line 13, column 59:
PL/SQL: ORA-00904: "SIMS_PROD"."PUBLISH_RPT_NEW"."RPT_FILE_NAME": invalid identifier
ORA-06550: line 13, column 12:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
Cause:    Usually a PL/SQL compilation error.
Action:

Ich habe gelesen, dass die post auf der Website: Wie kann ich Dateien extrahieren aus einer Oracle-BLOB-Feld? - aber - dies ist nur für eine Datei - meine Tabelle enthält mehrere Zeilen, die jeweils einen blob und verbunden mit dem Namen auf der Schleife durch diese Tabelle das er mir Kummer.

Muss ich das Präfix der name des Schemas, der Tabelle und Spalten explizit seit ich angemeldet bin als DBA-Benutzer und nicht als Besitzer des Schemas selbst. Hier ist mein code - was übersehe ich hier oder das falsche tun. Vielen Dank im Voraus für jede Hilfe aus der community - es ist viel geschätzt.

DECLARE 
t_blob BLOB; 
t_len NUMBER; 
t_file_name VARCHAR2(100); 
t_output utl_file.file_type; 
t_totalsize NUMBER; 
t_position NUMBER := 1; 
t_chucklen NUMBER := 4096; 
t_chuck RAW(4096); 
t_remain NUMBER; 

BEGIN
  FOR X IN (SELECT SIMS_PROD.publish_rpt_new.RPT_FILE_NAME,     SIMS_PROD.publish_rpt_new.RPT_CONTENTS FROM SIMS_PROD.PUBLISH_RPT)

  LOOP
    -- Get length of blob 
    SELECT dbms_lob.Getlength (SIMS_PROD.publish_rpt_new.RPT_CONTENTS),     SIMS_PROD.publish_rpt_new.RPT_FILE_NAME INTO t_totalsize, t_file_name FROM     SIMS_PROD.publish_rpt_new;
    t_remain := t_totalsize; 

    -- The directory TEMPDIR should exist before executing 
    t_output := utl_file.Fopen ('PDF_REP', t_file_name, 'wb', 32760); 

    -- Get BLOB 
    SELECT SIMS_PROD.publish_rpt_new.RPT_CONTENTS INTO t_blob FROM       SIMS_PROD.publish_rpt_new;

    -- Retrieving BLOB  
    WHILE t_position < t_totalsize 
      LOOP 
        dbms_lob.READ (t_blob, t_chucklen, t_position, t_chuck); 
        utl_file.Put_raw (t_output, t_chuck); 
        utl_file.Fflush (t_output); 
        t_position := t_position + t_chucklen; 
        t_remain := t_remain - t_chucklen; 

        IF t_remain < 4096 THEN t_chucklen := t_remain; 
        END IF; 
      END LOOP; 

    END LOOP;
END;
  • alter session set current_schema = sims_prod; zu beseitigen, die erklärte Notwendigkeit, einschließlich schema in der anonymen block.
Schreibe einen Kommentar