Ciao a tutti,
ho creato una External Table che legge da un file con separatore ";". Ho necessità di scartare alcuni record che non dovrebbero essere letti dalla ET.
Sto utilizzando un file di esempio che ha 2 colonne:
Attualmente ho impostato lo script in modo da scartare, con l'opazione REJECT ROWS WITH ALL NULL FIELDS, i record con entrambi i campi null:
CREATE TABLE "PROVA_ET" (
"NOME" VARCHAR2(255),
"COGNOME" VARCHAR2(255),
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "DIR_PROVA"
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
BADFILE DIR_PROVA: 'prova_et.bad'
DISCARDFILE DIR_PROVA: 'prova_et.dis'
LOGFILE DIR_PROVA: 'prova_et.log'
SKIP 1
fields terminated by ";"
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS (
NOME CHAR(255),
COGNOME CHAR(255)
)
)
LOCATION (
"INPUT_DIR_PROVA":'prova.csv'
)
)
REJECT LIMIT UNLIMITED
;
Come anticipato, ho necessità di scartare tutti i record che hanno il campo COGNOME valorizzato, per esempio, con 'Rossi'.
Leggendo in internet ho trovato una soluzione che è quella di impostare, nell'opzione REJECT ROWS WITH ALL NULL FIELDS, un NULLIF COGNOME = 'Rossi' su tutti i campi
CREATE TABLE "PROVA_ET" (
"NOME" VARCHAR2(255),
"COGNOME" VARCHAR2(255),
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "DIR_PROVA"
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
BADFILE DIR_PROVA: 'prova_et.bad'
DISCARDFILE DIR_PROVA: 'prova_et.dis'
LOGFILE DIR_PROVA: 'prova_et.log'
SKIP 1
fields terminated by ";"
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS (
NOME CHAR(255) NULLIF COGNOME='Rossi',
COGNOME CHAR(255) NULLIF COGNOME='Rossi'
)
)
LOCATION (
"INPUT_DIR_PROVA":'prova.csv'
)
)
REJECT LIMIT UNLIMITED
;
È l'unica soluzione possibile oppure potete consigliarmene un'altra?
Grazie in anticipo, ciao.
Michele