Oracle SQL 텍스트 전용 선택 출력을 포맷하는 방법
-
02-07-2019 - |
문제
Oracle SQL (SQLDeveloper에서 SQLPLUS 명령에 액세스 할 수 없음)을 사용하여 다음과 같은 모습을 보이는 쿼리를 실행합니다.
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
이것은 결과를 멋지게 형식화 된 빠른 텍스트 블록으로 전자 메일 또는 문제 보고서에 붙여 넣으려고 할 때 매우 넓고 다루기 힘든 텍스트 보고서를 생성 할 수 있습니다. 평범한 바닐라 Oracle SQL을 사용할 때 출력 열에 추가 공백이 있습니까? 지금까지 모든 웹 검색 결과가 SQLPlus (없는)의 열과 같은 형식의 명령을 사용하여 수행하는 방법을 보여주기 때문에 모든 웹 검색이 크게 나타나지 않았습니다.
해결책
결과를 얻기 위해 무엇을 사용하고 있습니까? 붙여 넣은 출력은 SQL*Plus에서 나오는 것처럼 보입니다. 결과를 생성하는 데 사용하는 도구에는 출력 수정 방법이있을 수 있습니다.
기본적으로 Oracle은 제목의 너비 또는 더 넓은 열 데이터의 너비를 기반으로 열을 출력합니다.
열을 더 작게 만들고 싶다면 기본값을 더 작게 만들기 위해 이름을 바꾸거나 텍스트로 변환하고 텍스트로 변환해야합니다.
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';
다른 팁
당신의 진술에서, 당신은 당신이 찾고있는 출력 유형을 지정할 수 있습니다.
select /*csv*/ col1, col2 from table;
select /*Delimited*/ col1, col2 from table;
XML, HTML, 텍스트, 로더 등과 같은 다른 형식이 있습니다.
도구> 기본 설정> 데이터베이스> 유틸리티> 내보내기에서 이러한 특정 옵션의 형식을 변경할 수 있습니다.
실행 명령문 대신 실행 스크립트를 선택하십시오.
* 이것은 Oracle SQL 개발자 v3.2를위한 것입니다
SQL로 할 수있는 일은 도구에 의해 제한됩니다. SQL Plus에는 열을 포맷하는 명령이 있지만 사용하기 쉽지는 않습니다.
빠른 접근 방식 중 하나는 출력을 Excel에 붙여 넣고 포맷하거나 스프레드 시트를 연결하는 것입니다. 일부 도구는 출력을 스프레드 시트로 직접 저장합니다.
좋은 질문. 나는 그것에 대해 정말로 생각해야했다.
당신이 할 수있는 한 가지는 가장 좁은 유용한 열만 리턴하도록 SQL을 변경하는 것입니다.
EG (나는 Oracle Syntax에서는별로 뜨겁지는 않지만 비슷한 것이 작동해야합니다) :
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 스크립트를 통해 배관하는 것이 좋습니다.
내가 undertonded다면, 당신의 질문을 업데이트하면 또 다른 가질 것입니다 :)
많은 줄이 반환되지 않으면 종종 사용하겠습니다. 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 개발자에서 쿼리를하고 XLS로 저장하면 Businessy 유형은 어떤 이유로 엑셀을 좋아합니다.
"캐스트"기능 만 사용하지 않는 이유는 무엇입니까?
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';