Oracle
 sql >> Database >  >> RDS >> Oracle

Importazione di file in Oracle Apex utilizzando wwv_flow_files

Si supponga di voler importare il contenuto di un file CSV con una procedura di database personalizzata in Oracle Apex utilizzando l'elemento della pagina di ricerca file. Segui questi passaggi:Crea file sfoglia l'elemento della pagina in Apex e scegli l'opzione wwv_flow_files per archiviare il file. Quindi crea il processo della pagina e scegli dopo l'invio e l'esecuzione dell'opzione di convalida e l'opzione del codice plsql per il processo. Nell'area plsql scrivi il codice seguente per esportare il file CSV dal database (vista wwv_flow_files) nell'unità del server e quindi chiamare la procedura personalizzata per importare il contenuto del file in una tabella.DECLARE
v_upl_blob BLOB;
vstart Number :=1;
bytelen Numero :=32000;
len Numero;
my_vr Raw (32000);
x Numero;
l_output Utl_file.file_type;
erout varchar2(1000);
BEGIN
SELECT blob_content
INTO v_upl_blob
DA wwv_flow_files
WHERE name =:P25_FB;
-- :p25_fb è l'elemento di ricerca file nella pagina
LEN :=Dbms_lob.getlength(V_UPL_BLOB);
l_output :=Utl_File.fopen ('MY_FILES', :P25_FB, 'wb', 32760);
vstart :=1;
bytelen :=32000;
SE len <32760
Allora
Utl_File.put_raw (l_output, V_UPL_BLOB);
Utl_File.fflush (l_output);
Altrimenti -- scrivi a pezzi
vstart :=1;

WHILE vstart 0
LOOP
Dbms_lob.Read (V_UPL_BLOB, bytelen, vstart, my_vr);
Utl_File.put_raw (l_output, my_vr);
Utl_File.fflush (l_output);
-- imposta la posizione iniziale per il taglio successivo
vstart :=vstart + bytelen;
-- imposta la posizione finale se inferiore a 32000 byte
x :=x - bytelen;

IF x <32000
Allora
bytelen :=x;
END IF;
END LOOP;
END IF;

Utl_File.fclose (l_output);

ELIMINA DA wwv_flow_files
WHERE name =:P25_FB;
COMMIT;
--- chiama la procedura del tuo database personalizzato per importare...
yourcustomprocedure(:P25_FB);
ECCEZIONE Quando Altri
Allora
IF Utl_File.is_Open(l_output) Allora
Utl_File.fclose (L_OUTPUT);
END IF;
rilancia;
END;