用sql developer吧,可以方便的作到
要么就写过程也行

解决方案 »

  1.   

    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/ 
      

  2.   

    可以用过程来做代码如下:
    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;