У меня есть проблемы с Oracle SQL Loader и поиск эффективного и простого решения. Мои исходные файлы, которые необходимо загрузить, - это номер |
, где значения заключены в Double Quotes "
. проблема заключается в том, что некоторые из значений содержат внутренние двойные кавычки.Oracle SQL-Loader эффективно управляет внутренними двойными котировками в значениях
например: ..."|"a":"b"|"...
это вызывает мои записи должны быть отвергнуты под предлогом:
no terminator found after TERMINATED and ENCLOSED field
существуют различные решения, через Интернет, но не кажется, подходит:
[1] Я попытался заменить все внутренние двойные кавычки в кавычках, , но кажется, что при применении этой функции слишком много полей в файлах управления (I hav е ~ 2000 + поля и используя FILLER загружать только подмножество) загрузчик жалуется снова:
SQL*Loader-350: Syntax error at line 7.
Expecting "," or ")", found ",".
field1 char(36) "replace(:field1,'"','""')",
(я не знаю, почему, но при применении этого решения на узком подмножестве столбцов это похоже на работу)
Дело в том, что потенциально все поля могут включать внутренние двойные кавычки.
[2] Я могу загрузить все данные при отсутствии глобального optionally enclosed by '"'
, но тогда все заключенные кавычки становятся частью данных в целевой таблице.
[3] можно опустить глобальное optionally enclosed by '"'
заявления и поместить его только в выбранных полях, в то время как попытаться "replace(:field1,'"','""')"
заявления на оставшемся, но это трудно осуществить, как я не могу знать заранее, какие подозреваемые поля для включения внутренних двойных кавычек.
вот мои вопросы:
не существует простого способа убедить погрузчик для обработки с ухода за внутренними двойными кавычками (когда значения заключены в них)?
Если я вынужден исправить данные ad-hock, есть ли одна команда Linux liner для преобразования только внутренних двойных кавычек в другую строку/char, говорят, одинарные кавычки?
Если я вынужден загружать данные с помощью кавычек в целевую таблицу, существует ли простой способ удалить двойные кавычки из всех полей, все сразу (таблица имеет 1000 столбцов). является ли решение практической производительности разумным для очень больших таблиц?
Может ли какое-либо из закрытых полей (которые могут содержать или не содержать двойные кавычки) содержать символ ограничителя - или действительно ли оболочка действительно избыточна? Может ли исходный файл генерироваться без вложений или с другим неиспользуемым символом? Удаление их перед обработкой может быть затруднительным (через регулярное выражение); ваш текущий 'replace()' слишком поздно, хотя после того, как запись была разделена на поля. Вы также можете посмотреть внешние таблицы с препроцессором для удаления корпусов. –
в первом файле, в котором я разбиваюсь, в данных нет данных - я предполагаю, что это редкий символ в свободном тексте, но я не могу предположить, что он никогда не появится, я не могу контролировать файлы, а поля могут содержать бесплатно текст третьей стороны. Я понимаю, что мне, возможно, придется искать исправление входного файла - мне придется сделать это простым и эффективным способом. Я как бы надеялся, есть простое исправление для файла управления без обработки самой информации (за пределами загрузчика) – kamashay