2008-09-27 9 views
5

Używam Oracle SQL (w sqldeveloper, więc nie mam dostępu do SQLPLUS poleceń takich jak KOLUMNY), aby wykonać kwerendę, która wygląda mniej więcej tak:Jak sformatować Oracle SQL tylko tekst Wybór wyjścia

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

wyniki dać mi wyglądać następująco:

 
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 

można bardzo łatwo produkować bardzo szeroki i nieporęczny raport tekstowy gdy próbuję wkleić wyniki jak ładnie sformatowany szybkie-n-brudne blok tekstu w wiadomości e-mail lub raport o problemie, itp. Jaki jest najlepszy sposób na pozbycie się wszystkich elementów ex tra białe spacje w kolumnach wyjściowych, gdy używam zwykłego loga Oracle SQL? Do tej pory wszystkie moje wyszukiwania w sieci nie pojawiały się zbyt wiele, ponieważ wszystkie wyniki wyszukiwania pokazują mi, jak to zrobić, używając poleceń formatujących, takich jak COLUMN w SQLPLUS (czego nie mam).

Odpowiedz

2

Czego używasz do uzyskania wyników? Wklejone dane wyjściowe wyglądają tak, jakby pochodziły z SQL * PLUS. Możliwe, że jakiekolwiek narzędzie używane do generowania wyników ma jakąś metodę modyfikacji wyników.

Domyślnie Oracle generuje kolumny oparte na szerokości tytułu lub szerokości danych kolumny, która jest zawsze szersza.

Jeśli chcesz, aby kolumny były mniejsze, musisz zmienić ich nazwy lub przekonwertować je na tekst i użyć funkcji substr(), aby zmniejszyć domyślne wartości.

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

Jak wspomniano, używam Oracle SQLDeveloper (darmowe narzędzie - jestem tania!). Może używać SQL * PLUS pod okładkami, ale nie pozwala mi używać polecenia COLUMN lub większości innych poleceń SQL * PLUS. Użycie substr (col, width) jest tym, czego szukałem - to pomaga! Wspaniały! –

0

Ładne pytanie. Naprawdę musiałem o tym pomyśleć.

Jedną z rzeczy, którą można zrobić, to zmienić SQL, tak aby zwracał tylko najwęższe użyteczne kolumny.

np. (Nie jestem zbyt gorąca w składni Oracle, ale coś podobnego powinno działać):

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

Czy to ma sens?
Jeśli robiłeś to na systemie Unix/Linux, sugerowałbym uruchomienie go z wiersza poleceń i przepuszczenie przez skrypt awk.

jakbym miss-rozumieć, a następnie zaktualizuj swoje pytanie i będę musiał jeszcze raz :)

+0

Próbowałem wkleić fragment twojej odpowiedzi do SQLDeveloper, ale Oracle zdaje się dławić konwersję. Myślę, że konwersja Oracle działa inaczej. Pomocne jest jednak użycie podłańcucha (substr). –

1

Co można zrobić z SQL jest ograniczona przez narzędzie. SQL Plus ma polecenia do formatowania kolumn, ale nie są one naprawdę łatwe w użyciu.

Jednym z szybkich sposobów jest wklejenie danych wyjściowych do programu Excel i sformatowanie go w tym miejscu lub po prostu dołączenie arkusza kalkulacyjnego. Niektóre narzędzia zapisują dane wyjściowe bezpośrednio jako arkusz kalkulacyjny.

+1

OK, to przyzwoita opcja. Właśnie sprawdziłem i programista SQL ma opcję eksportu wyników jako plik CVS lub XLS. –

0

Jeśli nie masz dużo wierszy zwróconych, często używam funkcji 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> 

Jeśli jej wiele wierszy, po prostu zrobić kwerendę SQL Developer i zapisać jako XLS, businessy rodzaje kochać excel z jakiegoś powodu.

2

W swoim oświadczeniu, można określić typ wyjścia szukasz:

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

są dostępne inne formaty takie jak XML, HTML, tekst, ładowarki itp

Można zmienić formatowanie tych konkretnych opcji Narzędzia> Preferencje> Bazy danych> Narzędzia> Export

Koniecznie wybierz Run Script zamiast Statement Run.

* to dla Oracle SQL Developer v3.2

0

Dlaczego nie wystarczy użyć funkcji "rzucania"?

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'; 
Powiązane problemy