SQL*Loader Discard file
Vogliamo caricare in una tabella i dati presenti in un file esterno che ha formato csv con delimitatore tra le colonne uguale alla virgola.
L'obiettivo è caricare solo alcune righe che soddisfano una determinata condizione.
Il file esterno è un csv così fatto.
1) Salvare il file csv sotto una directory a piacere come /u01/app/oracle/file_ext.
2) Collegarsi ad un pdb come amministratore e creaimo una tabella esterna:SQL> CON_NAME
-----------------
ORCLPDB
USER è "HR"
SQL> create table emp_load (
id number,
nome varchar2(100),
cognome varchar2(100));
3) Creae un control file (con estensione ctl) con il seguente codice che contiene riferimento a righe da scartare durante il carimaneto (discarded).
Salvare il file sotto il path contenente il file esterno.
[oracle@test file_ext]$ vi /u01/app/oracle/file_ext/emp.ctl
Load Data
INFILE '/u01/app/oracle/file_ext/emp.csv'
APPEND
INTO Table emp_load
WHEN empno <> '1008'
FIELDS TERMINATED BY ','
(id,
nome,
cognome
)
4) Eseguire dal server Oracle la seguente linea di codice
[oracle@test ~]$ sqlldr control=/u01/app/oracle/file_ext/emp.ctl log=/u01/app/oracle/file_ext/emp.log
Username:hr/hr@orclpdb
5) Per generare il file degli scarti
[oracle@test ~]$ sqlldr control=/u01/app/oracle/file_ext/emp.ctl log=/u01/app/oracle/file_ext/emp.log DISCARD=emp.dsc
Verifica:
[oracle@test file_ext]$ more emp.dsc
104145,Bruce145,Ernst145