Выбрать строку, заключенную в двойные кавычки, из записи в CSV-файле, разделенной запятой-разделителем - PullRequest
1 голос
/ 08 апреля 2020

У меня есть CSV-файл с примером строки ниже. Каждое поле разделено , разделителем. Но вы можете увидеть внутри двойных кавычек есть запятая.

Как получить строку ,, заключенную в двойные кавычки? Это не должно рассматриваться как разделитель.

Пожалуйста, помогите в Oracle PL / SQL код языка.

12791750024,"ROSETTE","ROLLIN","6,RUE DE MALLEVILLE","95880ENGHIEN LES BAINS",35000,53.4400000000000000000000

1 Ответ

0 голосов
/ 08 апреля 2020

PL / SQL? Чтобы прочитать файл CSV? Если можно, я бы предложил другой вариант - SQL* Loader . Он предлагает два варианта решения вашей проблемы; это

fields terminated by ',' 
optionally enclosed by '"'

Я создал тестовую таблицу, которая должна принимать данные, которые у вас есть в файле CSV:

SQL> desc dq;
 Name                    Null?    Type
 ----------------------- -------- ----------------
 ID                               NUMBER
 NAME_1                           VARCHAR2(10)
 NAME_2                           VARCHAR2(10)
 ADDR1                            VARCHAR2(25)
 ADDR2                            VARCHAR2(25)
 NUM1                             NUMBER
 NUM2                             NUMBER

SQL>

Контрольный файл (как infile, вы ' d используйте путь к вашему CSV-файлу, например, infile 'c:\temp\myfile.csv'). Для простоты я включил пример данных в секцию begindata.

load data 
infile *
replace
into table dq
fields terminated by ',' 
optionally enclosed by '"' 
trailing nullcols
( 
id,
name_1,
name_2,
addr1,
addr2,
num1,
num2 decimal external "replace(:num2, '.', ',')"
)

begindata
12791750024,"ROSETTE","ROLLIN","6,RUE DE MALLEVILLE","95880ENGHIEN LES BAINS",35000,53.4400000000000000000000

Сессия загрузки:

c:\Temp>sqlldr scott/tiger control=test17.ctl log=test17.log

SQL*Loader: Release 11.2.0.2.0 - Production on Sri Tra 8 09:03:01 2020

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

Commit point reached - logical record count 1

c:\Temp>

Результат:

SQL> select * From dq;

          ID NAME_1     NAME_2     ADDR1                     ADDR2                           NUM1       NUM2
------------ ---------- ---------- ------------------------- ------------------------- ---------- ----------
 12791750024 ROSETTE    ROLLIN     6,RUE DE MALLEVILLE       95880ENGHIEN LES BAINS         35000      53,44

SQL>

Вот, пожалуйста; все на своем месте.

...