2012-12-11 3 views
0

저는 해결책을 찾고 있었지만 솔직한 대답을 찾을 수 없습니다.오라클을 탭이 아닌 쉼표로 구분하는 방법은 무엇입니까?

필자의 oracle select 문에서 쉼표를 기준으로 열을 구분하고 싶습니다.

선택 * 사람들

Results: 
Name Age 
Bob 4 
Sam 5 
Joe 7 

나는 결과가되고 싶어에서 :
Bob,4 
Sam,5 
Joe,7 

어떻게하면 할 수

그래서, 나는이 같은 쿼리가 있다고 가정 해 보자?

+0

을 얘기하는 겁니까? 오라클 데이터베이스는 "별도의 열"을 수행하지 않습니다. 그것이 프론트 엔드 도구의 작업 일 것입니다. –

+0

아, 내 실수 야. 나는이 두 가지에 대해 혼란스러워했다. – Waffles

+0

질문에 질문을 추가하는 것이 좋습니다. – EvilTeach

답변

1

사용 병합 ||, 그리고 그들 사이의 쉼표로 값을 선택합니다.

SELECT NAME || ',' || AGE 
FROM 
(
    SELECT 'BOB' NAME, 4 AGE FROM DUAL 
    UNION ALL 
    SELECT 'SAM' NAME, 5 AGE FROM DUAL 
    UNION ALL 
    SELECT 'JOE' NAME, 7 AGE FROM DUAL 
) 
0
AskTom에 따르면

:

[email protected]> create or replace procedure dump_table_to_csv(p_tname in varchar2, 
    2             p_dir in varchar2, 
    3             p_filename in varchar2) 
    4 is 
    5  l_output  utl_file.file_type; 
    6  l_theCursor  integer default dbms_sql.open_cursor; 
    7  l_columnValue varchar2(4000); 
    8  l_status  integer; 
    9  l_query   varchar2(1000) 
10      default 'select * from ' || p_tname; 
11  l_colCnt  number := 0; 
12  l_separator  varchar2(1); 
13  l_descTbl  dbms_sql.desc_tab; 
14 begin 
15  l_output := utl_file.fopen(p_dir, p_filename, 'w'); 
16  execute immediate 'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' 
'; 
17 
18  dbms_sql.parse( l_theCursor, l_query, dbms_sql.native); 
19  dbms_sql.describe_columns(l_theCursor, l_colCnt, l_descTbl); 
20 
21  for i in 1 .. l_colCnt loop 
22   utl_file.put(l_output, l_separator || '"' || l_descTbl(i).col_name || '"' 
); 
23   dbms_sql.define_column(l_theCursor, i, l_columnValue, 4000); 
24   l_separator := ','; 
25  end loop; 
26  utl_file.new_line(l_output); 
27 
28  l_status := dbms_sql.execute(l_theCursor); 
29 
30  while (dbms_sql.fetch_rows(l_theCursor) > 0) loop 
31   l_separator := ''; 
32   for i in 1 .. l_colCnt loop 
33    dbms_sql.column_value(l_theCursor, i, l_columnValue); 
34    utl_file.put(l_output, l_separator || l_columnValue); 
35    l_separator := ','; 
36   end loop; 
37   utl_file.new_line(l_output); 
38  end loop; 
39  dbms_sql.close_cursor(l_theCursor); 
40  utl_file.fclose(l_output); 
41 
42  execute immediate 'alter session set nls_date_format=''dd-MON-yy'' '; 
43 exception 
44  when others then 
45   execute immediate 'alter session set nls_date_format=''dd-MON-yy'' '; 
46   raise; 
47 end; 
48/

Procedure created. 

[email protected]> exec dump_table_to_csv('emp', '/tmp', 'tkyte.emp'); 
+0

쿼리에서이 작업을 수행 할 수있는 방법이 없습니다. – Waffles

+0

저장 프로 시저가 더 효율적이라고 가정하고 있습니다. – hd1

0

이 오른쪽 쿼리입니다 : 당신은 SQL * 플러스에 대해

SELECT NAME||','||AGE FROM PEOPLE; 
관련 문제