2008-09-27 4 views
5

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

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.00 AM 

2 rows selected 

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

ответ

2

Что вы используете, чтобы получить результаты? Результат, который вы вставили, выглядит так, как будто он исходит из 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'; 
+0

Как уже упоминалось, я использую Oracle SQLDeveloper (бесплатный инструмент - я дешевый!). Он может использовать SQL * PLUS под обложками, но он не позволяет мне использовать команду COLUMN или большинство других команд SQL * PLUS. Использование substr (col, width) - это то, чем я был, хотя - это помогает! Большой! – 2008-09-27 18:27:38

0

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

Единственное, что вы можете сделать, это изменить свой 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-скрипт.

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

+0

Я пробовал вставить часть вашего ответа в SQLDeveloper, но Oracle, похоже, задыхается от конвертирования. Я думаю, что преобразование Oracle работает по-разному. Однако использование подстроки (substr) полезно. – 2008-09-27 19:54:14

1

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

Один быстрый подход состоит в том, чтобы вставить вывод в excel и форматировать его там, или просто приложить таблицу. Некоторые инструменты будут сохранять результат непосредственно в виде таблицы.

+1

Хорошо, это приличный вариант. Я только что проверил, и у SQL Developer есть возможность экспортировать результаты в виде файла CVS или XLS. – 2008-09-27 19:50:14

0

Если у вас нет много возвращенных строк, я часто использую функцию Tom Kytes print_table.

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, businessy типы любви превосходят по какой-то причине.

2

В вашем заявлении вы можете указать тип вывода вы ищете:

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

существует и другие форматы, доступные, такие как XML, HTML, текст, грузчик и т.д.

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

Не забудьте выбрать Run Script, а не Run Statement.

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

0

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

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';