Я хочу экспортировать некоторые данные (например, результаты некоторых запросов) из старой базы данных oracle в файл, значения которых разделены указанным символом или последовательностью символов. Файл CSV является примером.
Только целые числа, varchars (без перевода строки), даты, другие базовые c значения (?) В результирующем наборе, так что нет больших объектов или других интересных вещей. Просто простые данные, НИКАКОЙ ДОБАВКИ, НИКАКОЙ ОБОРОТЫ, поля, разделенные и, возможно, закрытые.
Практически, я ищу простой "ВЫБРАТЬ ... В АУТФИЛЬНЫЕ ПОЛЯ, ЗАПРЕЩЕНЫ ... char '"из mysql, но для Oracle.
Я пытался использовать sqlplus, но любая программа должна быть в порядке, если она работает на консоли linux и не основана на java : -P.
К сожалению, я не могу использовать "SET SQLFORMAT csv", кажется, что он не поддерживается.
Пока у меня есть лучшие результаты с чем-то вроде:
printf "set echo off newpage 0 size page 0 arraysize 5000 feed off off тримспул при обрезке по \ nselect field1 || '|' || field2 из таблицы; " | sqlplus -S database> output_file
Установка размера массива 5000 (максимум) обеспечивает наилучшую производительность, к сожалению, переносит результат, если строки длиннее 80 символов.
Установка размера строки 30000 (или даже 32767) отменяет упаковка, к сожалению, производительность становится ужасной. Я не хочу указывать максимальный размер строки для каждого запроса (вычисляя максимальный размер для каждого поля в результате), надеясь, что производительность повысится.
После прочтения множества ответов я все еще не могу приблизиться к решение, которое должно быть одновременно ПРАВИЛЬНЫМ и ИСПОЛНИТЕЛЬНЫМ. Мой следующий вызов будет записывать файл php для выполнения этой работы, но это бессмыслица, ИМХО использование приложения по умолчанию, sqlplus, должно дать лучшие результаты ...
Есть идеи?