oracle如何使用输出CSV文件

fsb_12345 2003-03-11 11:06:33
工作要求从数据库中导出到csv文件当中,不知道怎么办,各位大侠救命啊!
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzd1997 2003-03-11
  • 打赏
  • 举报
回复
可以用过程来做代码如下:
PROCEDURE print (
p_yyyy_st IN VARCHAR2
,p_mm_st IN VARCHAR2
,p_dd_st IN VARCHAR2
,p_yyyy_ed IN VARCHAR2
,p_mm_ed IN VARCHAR2
,p_dd_ed IN VARCHAR2
)
IS
lwk_Uriagehi_st VARCHAR2(8); -- 売上計上日開始
lwk_Uriagehi_ed VARCHAR2(8); -- 売上計上日終了
lwk_msg_arr common.vc_arr; -- エラーメッセージ(複数)
lwk_supplement_arr common.vc_arr; -- 補足(テーブル名、カラム名など)
lwk_idx INTEGER := 1; -- エラーのインデックス
--CSVファイル作成用
lwk_output_file UTL_FILE.FILE_TYPE;
lwk_csv_typ1 VARCHAR2(200);
lwk_stdate VARCHAR2(8); -- 計上日開始
lwk_eddate VARCHAR2(8); -- 計上日終了
lwk_Goukei_Suryo NUMBER := 0; -- 品番合計数量
lwk_Goukei_Kingaku NUMBER := 0; -- 品番合計金額
lwk_sql VARCHAR2(1000); -- 動的SQL格納WK

TYPE typ_cur IS REF CURSOR; -- CURSOR型を定義
cwk_typ typ_cur;
TYPE typ_rec IS RECORD(
Soshiki_ID Han_Ruiseki.Soshiki_ID%TYPE -- 組織コード
,Soshiki_Name Han_Soshiki.Soshiki_Name%TYPE -- 組織名称
,Keijyobi Han_Ruiseki.Keijyobi%TYPE -- 計上日
,Hinban_ID Han_Ruiseki.Hinban_ID%TYPE -- 品番コード
,Hinban_Name Han_Hinban.Hinban_Name%TYPE -- 品番名称
,Genka Han_Ruiseki.Genka%TYPE -- 原価単価
,Uriagehi_Suryo Han_Ruiseki.Suryo%TYPE -- 売上数量
,Uriagehi_Kingaku Han_Ruiseki.Genka_Kingaku%TYPE -- 売上金額
,Syouyinn_Suryo Han_Ruiseki.Suryo%TYPE -- 商引数量
,Syouyinn_Kingaku Han_Ruiseki.Genka_Kingaku%TYPE -- 商引金額
);
rec_typ typ_rec;
BEGIN
-- 売上計上日開始
IF p_yyyy_st IS NOT NULL OR p_mm_st IS NOT NULL OR p_dd_st IS NOT NULL THEN
IF common.chk_date2(p_yyyy_st,p_mm_st,p_dd_st) = FALSE THEN
lwk_msg_arr(lwk_idx) := ifarm_data.errmsg('1','W0002',wk_lng_div);
lwk_supplement_arr(lwk_idx) := ifarm_data.get_name('han_Uriagehi_st',wk_lng_div);
lwk_idx := lwk_idx + 1;
END IF;
END IF;
-- 売上計上日終了
IF p_yyyy_ed IS NOT NULL OR p_mm_ed IS NOT NULL OR p_dd_ed IS NOT NULL THEN
IF common.chk_date2(p_yyyy_ed,p_mm_ed,p_dd_ed) = FALSE THEN
lwk_msg_arr(lwk_idx) := ifarm_data.errmsg('1','W0002',wk_lng_div);
lwk_supplement_arr(lwk_idx) := ifarm_data.get_name('han_Uriagehi_ed',wk_lng_div);
lwk_idx := lwk_idx + 1;
END IF;
END IF;
-- エラーあれば、警告画面を表示する
IF lwk_msg_arr.COUNT > 0 THEN
common.error_msg(1,lwk_msg_arr,lwk_supplement_arr,0,wk_lng_div);
RETURN;
END IF;
-- 検索結果ゼロ件のチェック
IF p_yyyy_st IS NOT NULL THEN
lwk_Uriagehi_st := LPAD(p_yyyy_st,4,'0')||LPAD(p_mm_st,2,'0')||LPAD(p_dd_st,2,'0');
END IF;

IF p_yyyy_ed IS NOT NULL THEN
lwk_Uriagehi_ed := LPAD(p_yyyy_ed,4,'0')||LPAD(p_mm_ed,2,'0')||LPAD(p_dd_ed,2,'0');
END IF;

-- SQL文作成
lwk_sql := 'SELECT RSK.Soshiki_ID'; -- 組織コード
lwk_sql := lwk_sql || ',SSK.Soshiki_Name'; -- 組織名称
lwk_sql := lwk_sql || ',RSK.Keijyobi'; -- 計上日
lwk_sql := lwk_sql || ',RSK.Hinban_ID'; -- 品番コード
lwk_sql := lwk_sql || ',HBM.Hinban_Name'; -- 品番名称
lwk_sql := lwk_sql || ',RSK.Genka'; -- 原価単価
lwk_sql := lwk_sql || ',SUM(RSK1.Suryo) '; -- 売上数量
lwk_sql := lwk_sql || ',SUM(RSK1.Genka_Kingaku) '; -- 売上金額
lwk_sql := lwk_sql || ',SUM(RSK2.Suryo) '; -- 商引数量
lwk_sql := lwk_sql || ',SUM(RSK2.Genka_Kingaku) '; -- 商引金額
lwk_sql := lwk_sql || ' FROM Han_Ruiseki RSK,Han_Ruiseki RSK1, Han_Ruiseki RSK2, Han_Hinban HBM';
lwk_sql := lwk_sql || ' , Han_Soshiki SSK ';
lwk_sql := lwk_sql || 'WHERE RSK.Hinban_ID = HBM.Hinban_ID'; --品番コード
lwk_sql := lwk_sql || ' AND ( HBM.Hinban_ID = ''0410'' OR HBM.Hinban_ID = ''0440'' )';
lwk_sql := lwk_sql || ' AND RSK.Soshiki_ID = SSK.Soshiki_ID'; --組織コード
lwk_sql := lwk_sql || ' AND RSK.Seikyu_YMD = RSK1.Seikyu_YMD(+)'; --請求日
lwk_sql := lwk_sql || ' AND RSK.Seikyu_No = RSK1.Seikyu_No(+)'; --請求書番号
lwk_sql := lwk_sql || ' AND RSK.Seikyusyo_D_no = RSK1.Seikyusyo_D_no(+)'; --請求書明細No
lwk_sql := lwk_sql || ' AND RSK1.Denpyo_Syubetsu(+) != 12'; --伝票種別≠12 (売上)
lwk_sql := lwk_sql || ' AND RSK.Seikyu_YMD = RSK2.Seikyu_YMD(+)'; --請求日
lwk_sql := lwk_sql || ' AND RSK.Seikyu_No = RSK2.Seikyu_No(+)'; --請求書番号
lwk_sql := lwk_sql || ' AND RSK.Seikyusyo_D_no = RSK2.Seikyusyo_D_no(+)'; --請求書明細No
lwk_sql := lwk_sql || ' AND RSK2.Denpyo_Syubetsu(+) = 12'; --伝票種別=12 (商引扱い)
lwk_sql := lwk_sql || ifnotNULL(lwk_Uriagehi_st,' AND RSK.Keijyobi >= ''' || lwk_Uriagehi_st || '''');
lwk_sql := lwk_sql || ifnotNULL(lwk_Uriagehi_ed,' AND RSK.Keijyobi <= ''' || lwk_Uriagehi_ed || '''');
lwk_sql := lwk_sql || ' GROUP BY RSK.SOSHIKI_ID,SSK.SOSHIKI_NAME,RSK.KEIJYOBI';
lwk_sql := lwk_sql || ',RSK.HINBAN_ID,HBM.HINBAN_NAME,RSK.GENKA';
lwk_sql := lwk_sql || ' ORDER BY RSK.SOSHIKI_ID,RSK.KEIJYOBI,RSK.HINBAN_ID';
-- CSV出力する
OPEN cwk_typ FOR lwk_sql;
FETCH cwk_typ INTO rec_typ;
--該当レコードのチェック
IF cwk_typ%NOTFOUND THEN
common.error_msg(1,ifarm_data.errmsg('1','1004',wk_lng_div),0,wk_lng_div);
RETURN;
END IF;
--CSVファイルのオープン
lwk_output_file:=UTL_FILE.FOPEN(wk_csv_path,wk_csv_name || to_char(SYSDATE,'yyyymmddhh24miss') || '.csv','w');
--該当レコードのチェック
WHILE cwk_typ%FOUND LOOP
-- 品番合計数量
IF rec_typ.Uriagehi_Suryo IS NOT NULL AND rec_typ.Syouyinn_Suryo IS NOT NULL THEN
lwk_Goukei_Suryo := rec_typ.Uriagehi_Suryo + rec_typ.Syouyinn_Suryo;
ELSE
IF rec_typ.Uriagehi_Suryo IS NULL THEN
lwk_Goukei_Suryo := rec_typ.Syouyinn_Suryo;
END IF;
IF rec_typ.Syouyinn_Suryo IS NULL THEN
lwk_Goukei_Suryo := rec_typ.Uriagehi_Suryo;
END IF;
END IF;

-- 品番合計金額
IF rec_typ.Uriagehi_Kingaku IS NOT NULL AND rec_typ.Syouyinn_Kingaku IS NOT NULL THEN
lwk_Goukei_Kingaku := rec_typ.Uriagehi_Kingaku + rec_typ.Syouyinn_Kingaku;
ELSE
IF rec_typ.Uriagehi_Kingaku IS NULL THEN
lwk_Goukei_Kingaku := rec_typ.Syouyinn_Kingaku;
END IF;
IF rec_typ.Syouyinn_Kingaku IS NULL THEN
lwk_Goukei_Kingaku := rec_typ.Uriagehi_Kingaku;
END IF;
END IF;
--Type-1をCSVへ出力する
lwk_csv_typ1 := '"' || rec_typ.Soshiki_Name || '","'
|| formatYMD(rec_typ.Keijyobi) || '","' || rec_typ.Hinban_Name
|| '",' || rec_typ.Genka || ',' || rec_typ.Uriagehi_Suryo
|| ',' || rec_typ.Uriagehi_Kingaku || ',' || rec_typ.Syouyinn_Suryo
|| ',' || rec_typ.Syouyinn_Kingaku || ',' || lwk_Goukei_Suryo
|| ',' || lwk_Goukei_Kingaku;
UTL_FILE.PUT_LINE(lwk_output_file,lwk_csv_typ1);
FETCH cwk_typ INTO rec_typ;
END LOOP;
----CSVファイルのクローズ
UTL_FILE.FCLOSE(lwk_output_file);
CLOSE cwk_typ;
EXCEPTION
WHEN OTHERS THEN common.error_msg(1,SQLERRM,0,wk_lng_div);
END print;
END;
nicholaz 2003-03-11
  • 打赏
  • 举报
回复
就用第三方工具做吧!
oldwain 2003-03-11
  • 打赏
  • 举报
回复
select column1 || ', ' || column2 || ', ' || .....
from yourtable;

===========================
oldwain
---------------------------
http://www.itpub.net/index.php?referrerid=32
http://www.linuxforum.net/
http://expert.csdn.net/
http://www.oraclefan.net/
penitent 2003-03-11
  • 打赏
  • 举报
回复
用sql developer吧,可以方便的作到
要么就写过程也行

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧