그래서 저장 프로 시저를 통해 실행하고 쿼리의 출력을 CSV 파일로 내보내려는 쿼리가 있습니다. 그러나 마지막 열 이름은 내가 그것을 할 다음 저장 프로 시저를 사용하고 printed.So 받고되지 않습니다oracle 저장 프로 시저에서 쿼리 결과를 csv로 내 보냅니다. 마지막 열 이름이 인쇄되지 않습니다.
create or replace PROCEDURE parseCSV(
p_file_name VARCHAR2, -- filename
p_sql_query VARCHAR2, -- select * from table or some such query
p_delimiter CHAR, -- column delimiter
p_file_dir VARCHAR2 -- Oracle directory name
)
AS
l_cursor_handle INTEGER;
l_dummy NUMBER;
l_col_cnt INTEGER;
l_rec_tab DBMS_SQL.DESC_TAB;
l_current_col NUMBER(16);
l_current_line VARCHAR2(2047);
l_column_value VARCHAR2(300);
l_file_handle UTL_FILE.FILE_TYPE;
l_print_text VARCHAR2(100);
l_record_count NUMBER(16) := 0;
BEGIN
l_file_handle := UTL_FILE.FOPEN(p_file_dir, p_file_name, 'a', 2047);
l_cursor_handle := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(l_cursor_handle, p_sql_query, DBMS_SQL.native);
l_dummy := DBMS_SQL.EXECUTE(l_cursor_handle);
DBMS_SQL.DESCRIBE_COLUMNS(l_cursor_handle, l_col_cnt, l_rec_tab);
dbms_output.put_line(l_col_cnt);
l_current_col := l_rec_tab.FIRST;
dbms_output.put_line(l_current_col);
IF (l_current_col IS NOT NULL) THEN
LOOP
DBMS_SQL.DEFINE_COLUMN(l_cursor_handle, l_current_col, l_column_value, 300);
l_print_text := l_rec_tab(l_current_col).col_name ||
p_delimiter;
l_current_col := l_rec_tab.NEXT(l_current_col);
IF l_current_col IS NULL/*handling for last delimiter for
column */
THEN
l_print_text:=substr(l_print_text,-1);
END IF;
UTL_FILE.PUT (l_file_handle, l_print_text);
EXIT WHEN (l_current_col IS NULL);
END LOOP;
END IF;
UTL_FILE.PUT_LINE (l_file_handle,' ');
LOOP
EXIT WHEN DBMS_SQL.FETCH_ROWS(l_cursor_handle) = 0;
l_current_line := '';
FOR l_current_col IN 1..l_col_cnt LOOP
DBMS_SQL.COLUMN_VALUE (l_cursor_handle, l_current_col, l_column_value);
l_print_text := l_column_value || p_delimiter;
IF l_current_col =l_col_cnt
then
l_current_line := l_current_line || l_column_value;
ELSE
l_current_line := l_current_line || l_column_value ||
p_delimiter;
END IF;
END LOOP;
l_record_count := l_record_count + 1;
UTL_FILE.PUT_LINE (l_file_handle, l_current_line);
END LOOP;
UTL_FILE.FCLOSE (l_file_handle);
DBMS_SQL.CLOSE_CURSOR(l_cursor_handle);
END;
절차를 다음 실행 프로세스 쿼리와는 구분 된 파일에 결과를 저장합니다. 그러나 마지막 열 이름은
ID NAME DEPT_ID DEPT
1 Prathick 55 FSU India
2 Sunny 55 FSU Japan
3 Muthu 55 FSU India
4 Manoj 55 FSU Japan
예상 출력 ...
ID NAME DEPT_ID DEPT Country
1 Prathick 55 FSU India
2 Sunny 55 FSU Japan
3 Muthu 55 FSU India
4 Manoj 55 FSU Japan
Could someone please help me..I am new to oracle.I would really appreciate it
도움이 필요한 경우 여기에서 refcursor를 구문 분석하고 CSV 출력을 생성하는 작업 예제가 있습니다. http://www.williamrobertson.net/documents/refcursor-to-csv.shtml –