Criei com sucesso uma tabela de registro de erros
BEGIN
DBMS_ERRLOG.create_error_log(
dml_table_name => 'enzyme',
skip_unsupported => TRUE);
END;
/
desc ERR$_ENZYME;
Name Null? Type
--------------- ----- --------------
ORA_ERR_NUMBER$ NUMBER
ORA_ERR_MESG$ VARCHAR2(2000)
ORA_ERR_ROWID$ UROWID
ORA_ERR_OPTYP$ VARCHAR2(2)
ORA_ERR_TAG$ VARCHAR2(2000)
ENZ_NAME VARCHAR2(4000)
Mas recebo um erro quando tento executar esta consulta:
insert /*+ ignore_row_on_dupkey_index ( enzyme ( enz_name ) ) */
into enzyme
SELECT enz_name FROM EXTERNAL ((
construct_id NUMBER(10),
n_term VARCHAR2 (50),
enz_name VARCHAR2 (3),
c_term VARCHAR2 (50),
cpp VARCHAR2 (50),
mutations VARCHAR2 (50),
mw_kda NUMBER (7, 3))
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_to_input
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
skip 1
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
MISSING FIELD VALUES ARE NULL
)
LOCATION ('CONSTRUCT.CSV')
LOG ERRORS INTO ERR$_ENZYME ('INSERT') REJECT LIMIT UNLIMITED) ext
where not exists (
select * from enzyme e
where e.enz_name = ext.enz_name
);
Error at Command Line : 79 Column : 5
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
A linha 79 é a linha LOG ERRORS INTO.
Se eu deletar a LOG ERRORS INTO ERR$_ENZYME ('INSERT')
parte, este comando funciona perfeitamente.
Como a parte do log de erros DML (
LOG ERRORS INTO ...
) pertence à inserção externa, não à tabela externa embutida. Mova-o para fora da parte interna.As tabelas externas possuem um tipo diferente de log de erros, outro arquivo pode ser especificado com a
BADFILE
cláusula onde as linhas com erros são registradas.Atualizar:
Algo assim: