среда, 9 июля 2014 г.

SQL. SELECT into file

SQL Developer: 

Method 1
Add the comment /*csv*/ to your SQL query and run the query as a script (using F5 or the 2nd execution button on the worksheet toolbar)
enter image description here
That's it.
Method 2
Run a query
alt text
Right click and select unload.

Запись результатов sql-запроса в файл bash:

 Как записать каждую запись результата sql-запроса в файл через пробел в bash'е? Как записать каждую запись результата sql-запроса в файл на отдельной строке в bash'е?

\\  psql dbname -c 'select * from test1' > file.txt

Файловый вывод/ввод

Большинство программ, работающих с БД, позволяют сохранять выборки в различных форматах, но не все позволяют сохранить в виде простого текстового файла. Например, была ситуация, когда в БД была необходимая информация о сотрудниках (более тысячи человек) для одной стандартной формы. А формат файла, описывающий эту форму, оказался текстовым. Поэтому проблема решилась выборкой в файл и вставкой его содержимого в файл формы. А соответствующий отдел был избавлен от лишней работы. Для конкретности примера, воспользуемся следующей таблицей с данными.

-- таблица цветов
create table colors(
id integer,
cname varchar(45), 
constraint pk_colors primary key (id)
);

insert into colors values(1,'красный');
insert into colors values(2,'синий');
insert into colors values(3,'зеленый');
insert into colors values(4,'белый');
insert into colors values(5,'черный');
commit;

Oracle

В Oracle вывод в файл реализуется с помощью команды SQL plus spool. Она служит как для начала вывода в файл, так и для остановки. По умолчанию расширение файла lst.

-- открываем вывод в файл
spool c:\\myfile; 

-- выборка
select t.id || ' ' || t.cname from colors t;

-- закрываем вывод в файл
spool off; 
Так как это не SQL команда, то ее нельзя использовать внутри PL/SQL блока, но можно поместить блок между этими командами. По этой же причине, чтобы выполнить этот пример в PL/SQL developer, нужно открыть Command window.
На некоторых операционных системах поддерживается дополнительный параметр out, позволяющий сразу распечатать выборку на принтере установленном по умолчанию.

-- открываем вывод в файл
spool c:\myfile; 

-- выборка
select t.id || ' ' || t.cname from colors t;

-- закрываем вывод файл и распечатываем
spool out; 

MySQL

В MySQL данная задача реализована аналогично сохранению выборки в списке переменных в команде select.

select *
into outfile 'c:/myfile.lst' -- указываем файл
fields terminated by ',' -- разделитель полей
enclosed by '"' -- заключить каждое поле между "
lines terminated by '\\n' -- разделитель строки
from colors;
Если какой-либо разделитель не нужен, то его определение можно опустить. В отличие от Oracle здесь нельзя вывести более одной выборки в один файл.
Команда LOAD DATA INFILE является обратной и позволяет загрузить данные из файла в таблицу.
Например пусть есть файл myfile.lst, со следующим содержимым в обычной для Windows русской кодировке.
"50", "светло-коричневый"
"51", "темно-коричневый"
Тогда загрузить данные можно следующей командой.

load data  infile 'c:/myfile.lst' 
  ignore -- пропускаем если данные уже в таблице
  into table colors
  character set cp1251 -- кодировка исходного файла
  fields
  terminated by ',' -- разделитель полей
  enclosed by '"' -- поле заключено между "
  lines terminated by '\\n'; -- разделитель строки
Если таблица colors использует другую кодировку, например utf-8, данные преобразуются корректно.

PostgreSQL

Команда copy в PostgreSQL позволяет, как сохранить выборку в файле, так загрузить данные из файла. Файловый источник должен существовать заранее, при записи автоматически он не создается. При повторном копировании содержимое файла перезаписывается. При чтении из файла в таблицу, кодировки строковых данных должны совпадать.

-- простой вывод данных в файл
copy (select * from colors) to 'c:/myfile.lst'; 

-- предположим, база настроена на кодировку utf-8,
-- тогда и строки сохранятся в файл в utf-8
copy 
  (
  select '"50", "светло-коричневый"'
    union
  select '"51", "темно-коричневый"'
  ) to 'c:/myfile.lst';

-- а теперь загрузим данные в таблицу
copy colors (id, cname) from 'c:/myfile.lst'
  with delimiter ',' -- разделитель полей
  null 'null' -- чем заменять пустые значения
  cvs -- CSV настройки
  quote '"' -- поле заключено между "
  escape '\\\\' ; -- ESC символ, для пропуска "

Комментариев нет:

Отправить комментарий

SEO: Эксперимент: как Яндекс и Google учитывают ключевые слова в URL

Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Дата пу...