Как отформатировать Oracle SQL только для текста выберите вывод - PullRequest
5 голосов
/ 27 сентября 2008

Я использую Oracle SQL (в SQLDeveloper, поэтому у меня нет доступа к командам SQLPLUS, таким как COLUMN) для выполнения запроса, который выглядит примерно так:

select assigner_staff_id as staff_id, active_flag, assign_date,
  complete_date, mod_date
from work where assigner_staff_id = '2096';

Результаты, которые он мне дает, выглядят примерно так:

STAFF_ID               ACTIVE_FLAG ASSIGN_DATE               COMPLETE_DATE             MOD_DATE                  
---------------------- ----------- ------------------------- ------------------------- ------------------------- 
2096                   F           25-SEP-08                 27-SEP-08                 27-SEP-08 02.27.30.642959000 PM 
2096                   F           25-SEP-08                 25-SEP-08                 25-SEP-08 01.41.02.517321000 AM 

2 rows selected

Это может очень легко создать очень широкий и громоздкий текстовый отчет, когда я пытаюсь вставить результаты как красиво отформатированный текстовый блок quick-n-dirty в отчет по электронной почте или о проблеме и т. Д. Каков наилучший способ избавиться от лишних пробелов в выходных столбцах, когда я использую просто ванильный Oracle SQL? Пока что все мои поиски в Интернете не показали много, так как все результаты веб-поиска показывают мне, как это сделать, используя команды форматирования, такие как COLUMN в SQLPLUS (которых у меня нет).

Ответы [ 6 ]

2 голосов
/ 02 ноября 2012

В своем утверждении вы можете указать тип вывода, который вы ищете:

select /*csv*/ col1, col2 from table;
select /*Delimited*/ col1, col2 from table;

Доступны другие форматы, такие как xml, html, text, loader и т. Д.

Вы можете изменить форматирование этих конкретных опций в разделе инструменты> настройки> База данных> Утилиты> Экспорт

Обязательно выберите Run Script, а не Run Statement.

* это для Oracle SQL Developer v3.2

2 голосов
/ 27 сентября 2008

Что вы используете, чтобы получить результаты? Вывод, который вы вставили, выглядит так, как будто он идет от SQL * PLUS. Может случиться так, что любой инструмент, который вы используете для генерации результатов, имеет какой-то метод модификации вывода.

По умолчанию Oracle выводит столбцы на основе ширины заголовка или ширины данных столбца, которая когда-либо шире.

Если вы хотите уменьшить размер столбцов, вам нужно либо переименовать их, либо преобразовать в текст и использовать substr (), чтобы уменьшить значения по умолчанию.

select substr(assigner_staff_id, 8) as staff_id, 
      active_flag as Flag, 
      to_char(assign_date, 'DD/MM/YY'),
      to_char(complete_date, 'DD/MM/YY'), 
      mod_date
from work where assigner_staff_id = '2096';
1 голос
/ 27 сентября 2008

То, что вы можете сделать с помощью sql, ограничено вашим инструментом. В SQL Plus есть команды для форматирования столбцов, но они не очень просты в использовании.

Один быстрый способ - вставить результат в Excel и отформатировать его там или просто прикрепить электронную таблицу. Некоторые инструменты сохраняют вывод непосредственно в виде электронной таблицы.

0 голосов
/ 20 ноября 2013

Почему бы просто не использовать функцию "cast"?

select 
(cast(assigner_staff_id as VARCHAR2(4)) AS STAFF_ID,
(cast(active_flag as VARCHAR2(1))) AS A,
(cast(assign_date as VARCHAR2(10))) AS ASSIGN_DATE,
(cast(COMPLETE_date as VARCHAR2(10))) AS COMPLETE_DATE,
(cast(mod_date as VARCHAR2(10))) AS MOD_DATE
from work where assigner_staff_id = '2096';
0 голосов
/ 28 сентября 2008

Если у вас не возвращено много строк, я часто буду использовать Tom Kytes print_table function.

SQL> set serveroutput on 
SQL> execute print_table('select * from all_objects where rownum < 3');
OWNER                         : SYS
OBJECT_NAME                   : /1005bd30_LnkdConstant
SUBOBJECT_NAME                :
OBJECT_ID                     : 27574
DATA_OBJECT_ID                :
OBJECT_TYPE                   : JAVA CLASS
CREATED                       : 22-may-2008 11:41:13
LAST_DDL_TIME                 : 22-may-2008 11:41:13
TIMESTAMP                     : 2008-05-22:11:41:13
STATUS                        : VALID
TEMPORARY                     : N
GENERATED                     : N
SECONDARY                     : N
-----------------
OWNER                         : SYS
OBJECT_NAME                   : /10076b23_OraCustomDatumClosur
SUBOBJECT_NAME                :
OBJECT_ID                     : 22390
DATA_OBJECT_ID                :
OBJECT_TYPE                   : JAVA CLASS
CREATED                       : 22-may-2008 11:38:34
LAST_DDL_TIME                 : 22-may-2008 11:38:34
TIMESTAMP                     : 2008-05-22:11:38:34
STATUS                        : VALID
TEMPORARY                     : N
GENERATED                     : N
SECONDARY                     : N
-----------------

PL/SQL procedure successfully completed.

SQL> 

Если в нем много строк, я просто сделаю запрос в SQL Developer и сохраню его как xls, деловые типы почему-то любят Excel.

0 голосов
/ 27 сентября 2008

Хороший вопрос. Я действительно должен был подумать об этом.

Одна вещь, которую вы можете сделать, это изменить ваш SQL так, чтобы он возвращал только самые узкие используемые столбцы.

например. (Я не очень разбираюсь в синтаксисе оракула, но что-то подобное должно работать):

select substring( convert(varchar(4), assigner_staff_id), 1, 4 ) as id, 
       active_flag as act, -- use shorter column name

       -- etc. 

from work where assigner_staff_id = '2096';

Имеет ли это смысл?
Если бы вы делали это в unix / linux, я бы предложил запустить его из командной строки и передать по сценарию awk.

Если я неправильно понял, пожалуйста, обновите ваш вопрос, и я пойду еще раз:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...