Sql ldr контрольный файл - PullRequest
0 голосов
/ 06 мая 2019

Мой скрипт загрузчика не работает из-за ORA-01722 для поля PATHID, которое определяется как целое число внешнее в управляющем файле. Теперь я хочу проверить, содержит ли столбец pathid файла числовое значение или нет, а затем вставить как ноль, если это не число. Моя база данных - оракул.

1 Ответ

0 голосов
/ 06 мая 2019

Вот пример;посмотрим, поможет ли это.

Сначала проверьте таблицу и функцию, которая проверяет, является ли значение параметра числом или нет.Он будет использоваться в контрольном файле.

SQL> create table test (pathid number, name varchar2(20));

Table created.

SQL> create or replace function f_isnum (par_value in varchar2)
  2    return varchar2
  3  is
  4    -- if PAR_VALUE is a number, return Y. Otherwise, return N
  5  begin
  6    return case when regexp_like(par_value, '^\d+$') then 'Y' else 'N' end;
  7  end;
  8  /

Function created.

SQL>

Контрольный файл, который также содержит некоторые примеры данных.Проверьте поле PATHID, в котором используется ранее созданная функция.

load data 
infile *
replace
into table test
fields terminated by "|" TRAILING NULLCOLS 
(
pathid integer external "case when f_isnum(:pathid) = 'Y' then :pathid else null end",
name)

begindata
123|Littlefoot
xxx|Invalid one
125|This is OK

Проверка:

SQL> $sqlldr scott/tiger control=test07.ctl log=test07.log

SQL*Loader: Release 11.2.0.2.0 - Production on Pon Svi 6 18:41:12 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 2
Commit point reached - logical record count 3

SQL> select * From test;

    PATHID NAME
---------- --------------------
       123 Littlefoot
           Invalid one
       125 This is OK

SQL>
...