Как сохранить выгрузку в oracle sql developer
How to Export Data using SQL Developer
Updated: Nov 2009 for SQL Developer 2.1
After completing this How-To, you should be able to understand:
- How to export data to various file formats using SQL Developer
- How to export the object definitions in your schema
Table of Contents
Oracle SQL Developer provides utilities to export both the definitions of the objects in a schema and the data stored in those objects. In this How-To we start by exporting the data and then move onto exporting object definitions.
- Oracle SQL Developer
- Oracle Database 9.2.0.1 or later
- Access to the Sample User Account HR (See Step 2 of this Getting Started: Oracle SQL DeveloperGuide)
Expand the Connections Navigator and the Tables node.
Click on DEPARTMENTS.
Select the Data tab.
Select insert from the Export Data context menu. This will produce a file of insert statements.

You can also fine tune what is exported by selecting the columns and adding a where clause to reduce the number of records returned. In this example, we’ll take the default of all the records and columns.



-
Using the main menu, select Tools->Database Export.


Click Next.




Click Go. The list now displays tables that start with «D».
Click Next.

Click Next.



- There are many SQL examples in the Database Documentation on OTN
- Discuss this how-to in the OTN SQL Developer Forum.
Експорт данных sql developer
Судя по ошибке, данные перенеслись все, но sql developer решил не открывать результат экспорта в редакторе, т.к. файл получился слишком большой.
– user177221
15 окт 2015 в 19:36
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
У SQL Developer есть ограничение на размер файла экспорта, выгружаемого таким образом. В качестве обходного пути могу посоветовать выгружать не как insert выражения, а скажем, как csv. Сэкономите на синтаксисе.
Отслеживать
ответ дан 31 окт 2015 в 8:47
950 1 1 золотой знак 7 7 серебряных знаков 13 13 бронзовых знаков
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Динамическая выгрузка селекта в XLS нужного формата в PL/SQL (Oracle 11g2, библиотека AS_XLSX)
Иногда необходимо сделать быструю выгрузку данных в интерфейсе Formspider при нажатии на кнопку «Export to XLS», к примеру. Для этого в Formspider создаётся объект ACTION в котором указывается пакет и его процедура, скачивающая нужные данные.
В теле процедуры объявлена переменная формата BLOB, которой присваивается значение, возвращаемое функцией, которой я и хочу поделиться с общественностью (выгрузка из PL/SQL делается при помощи пакетов DBMS_SQL и AS_XLSX).
Самый простой способ динамической выгрузки запроса в XLS посредством вышеуказанного пакета:
begin
as_xlsx.query2sheet( ‘SELECT * FROM table_name’);
as_xlsx.save(‘DIRECTORY’, ‘my.xlsx’ );
end;
Однако когда вы откроете выгруженный файл, то в нём не будет красивых заголовков, выравнивания, границ ячеек и нужного шрифта.
Удобство функции заключается в том, что вы передаёте ей любой запрос и на выходе получаете эксель-файл с нужным форматом оформления и всеми столбцами, которые возвращает SELECT.
Код для создания функции
CREATE OR REPLACE FUNCTION get_xlsx_from_select(SELECT_STATEMENT in VARCHAR2) RETURN BLOB is nc NUMBER; rc NUMBER; ncol NUMBER; headers VARCHAR2(69); cols DBMS_SQL.DESC_TAB; colvalue VARCHAR2(69); v_file BLOB; col_num NUMBER := 0; row_num NUMBER := 2; BEGIN as_xlsx.clear_workbook; as_xlsx.new_sheet('New'); nc := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(nc, select_statement, dbms_sql.native); DBMS_SQL.DESCRIBE_COLUMNS(nc, ncol, cols); --headers FOR i in 1..ncol LOOP DBMS_SQL.DEFINE_COLUMN(nc, i, colvalue, 64); headers := cols(i).col_name; --format col_num := col_num + 1; as_xlsx.set_row(1, p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 10, p_bold => TRUE), p_fillId => as_xlsx.get_fill('solid', 'FFCC66'), p_borderId => as_xlsx.get_border); --headers as_xlsx.set_column_width(col_num, 14); as_xlsx.cell(col_num, 1, headers, p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => TRUE)); END LOOP; rc := DBMS_SQL.EXECUTE(nc); --rows WHILE DBMS_SQL.FETCH_ROWS(nc) > 0 LOOP for i in 1..ncol loop DBMS_SQL.COLUMN_VALUE(nc, i, colvalue); --format as_xlsx.set_row(row_num, p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 9), p_borderId => as_xlsx.get_border); --data as_xlsx.cell(i, row_num, coalesce(colvalue, '-'), p_alignment => as_xlsx.get_alignment(p_horizontal => 'center', p_vertical => 'center', p_wraptext => TRUE)); end loop; row_num := row_num + 1; END LOOP; dbms_sql.close_cursor(nc); v_file := as_xlsx.finish; RETURN v_file; END;
Вызывается функция очень просто (для экономии времени в будущем при работе с датами и текстом необходимо экранировать одинарные кавычки посредством q'[. ]’)
SELECT get_xlsx_from_select(q'[SELECT id, name, to_char(date, ‘mm.dd.yyyy’) FROM moex]’) FROM dual;
Имеются некоторые особенности:
- eсть ограничение в 32767 символов, при просмотре получившегося BLOB в тестовом окне PL/SQL при нажатии на «. «. Если его сохранить в файловой системе, то файл откроется без проблем.
- чтобы дата в выгруженном XLS была в нужном формате в селекте его надо указать для нужного поля TO_CHAR(birth_date, ‘dd.mm.yyyy’), поскольку вышеуказанная функция формирования XLS возвращает все данные как текст.
Пример выгруженного файла (название поля «DATE» для примера.. уточняю, т.к. это зарезервированное слово):
Формирование объектов PL/SQL для выгрузки отчётов в формате XLSX с помощью Java и пакета AS_XLSX
Часто приходится делать различные выгрузки отчётов в формате XLSX из Oracle, используя PL/SQL developer (Oracle 11g2). Так часто, что решил автоматизировать этот процесс на Java. Язык Java изучаю сам по книгам и видеокурсам уже давно, поэтому если будут какие-то дополнения или замечания по коду, то опишите их здесь.
Выгрузка из PL/SQL делается при помощи библиотеки AS_XLSX.
Gui создан для удобства. Скачал jar, открыл его (должна быть установлена Java на компьютере), указал параметры и столбцы, нажал кнопку, получил готовый код для вставки в пакет PL/SQL (сэкономил нервы и время).


- Формирование кода объектов PL/SQL производится после ввода параметров и столбцов при нажатии на кнопку «Create objects»;
- Столбцы можно редактировать вручную или загружать их по кнопке «Open file» из файлов формата CSV или TXT.
- Record создаётся на выбор в 2 вариантах:
— на основе %TYPE view или таблицы (не %ROWTYPE т.к. чаще нужны не все поля для выгрузки);
— на основе введённых типов в таблице Columns. - Возможность очистки списка параметров и столбцов;
- Добавлены комбобоксы со шрифтами, типами данных, boolean переменными и выравниванием в ячейках;
- Цвет фона заголовков можно увидеть сразу в параметрах. При указании другого кода цвета, фон ячейки поменяет цвет на указанный;
- Столбцы с типом данных DATE будут приведены к типу ‘DD.MM.YYYY’.
Код, получаемый после ввода параметров и 3 столбцов:
-- Package specification -- version 1 type t_type_of_record is record ( BD_ID table_or_view.BD_ID%TYPE, BD_NAME table_or_view.BD_NAME%TYPE, BD_DATE table_or_view.BD_DATE%TYPE ); -- version 2 type t_type_of_record is record ( BD_ID NUMBER, BD_NAME VARCHAR2(4000), BD_DATE DATE ); type t_type_of_record_tbl is table of t_type_of_record; function get_xls_function(p_type in t_type_of_record_tbl) return blob; -- Package body -- procedure procedure get_xls_from_table is l_file BLOB; l_file_name varchar2(30) := 'file_name'; l_type t_type_of_record_tbl; begin select BD_ID, BD_NAME, BD_DATE bulk collect into l_type from table_or_view where column_name between sysdate and sysdate + 1; l_file := get_xls_function(l_type); if lengthb(l_file) > 0 then api_datasource.setColumnValue('BLOB_DUAL_ds.blob', l_file); api_datasource.download('BLOB_DUAL_ds.blob', l_file_name||'.xlsx'); end if; exception when others then sb_util.write_log('package.get_xls_from_table ошибка: ' || sqlerrm ||chr(13)|| dbms_utility.format_error_backtrace, 'info'); end; -- function function get_xls_function(p_type in t_type_of_record_tbl) return blob is row_num number := 0; v_file blob; begin as_xlsx.clear_workbook; as_xlsx.new_sheet('tab1'); row_num := row_num + 1; as_xlsx.set_row(row_num, p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 13, p_bold => true), p_fillId => as_xlsx.get_fill('solid', 'FFCC66'), p_borderId => as_xlsx.get_border); -- headers as_xlsx.set_row_height(1, 25); as_xlsx.set_column_width(1, 10); as_xlsx.cell(1, 1, 'id', p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => true)); as_xlsx.set_column_width(2, 20); as_xlsx.cell(2, 1, 'name', p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => true)); as_xlsx.set_column_width(3, 18); as_xlsx.cell(3, 1, 'date', p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => true)); FOR i IN 1..p_type.count loop row_num := row_num + 1; as_xlsx.set_row(row_num, p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 12), p_borderId => as_xlsx.get_border); as_xlsx.set_row_height(row_num, 25); -- as_xlsx.cell(1, i + 1, coalesce(p_type(i).BD_ID, '-'), p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => true), p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 12, p_bold => false, p_italic => false)); as_xlsx.cell(2, i + 1, coalesce(p_type(i).BD_NAME, '-'), p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => true), p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 12, p_bold => false, p_italic => false)); as_xlsx.cell(3, i + 1, coalesce(to_char(p_type(i).BD_DATE, 'dd.mm.yyyy'), '-'), p_alignment => as_xlsx.get_alignment (p_horizontal => 'center', p_vertical => 'center', p_wraptext => true), p_fontId => as_xlsx.get_font('Times New Roman', p_fontsize => 12, p_bold => false, p_italic => false)); end loop; v_file := as_xlsx.finish; RETURN v_file; exception when others then sb_util.write_log('package.get_xls_function ошибка: ' ||sqlerrm||chr(13)|| dbms_utility.format_error_backtrace, 'info'); END;
Итоговый эксель-файл выглядит так:
