2010-12-14 14 views
0

パッケージを実行するためのクエリを含むbatファイルを作成する必要があります。 私はパッケージを開発するためにplsql開発者を使用します。ユーザ名、パスワード、データベースはそれぞれuser、pswd、db1です。パッケージを実行するには クエリは次のとおりです。とbatファイルを作成してクエリを実行する

SELECT   
    COLUMN1 AS "LAST NAME", 
    COLUMN2 AS "FIRST NAME", 
    COLUMN3 AS "LOCATION"  
FROM TABLE(PKG.GET_SUM('09-NOV-2010','12-NOV-2010')) 

誰も私を助けることができる私は、事前

おかげでbatファイルを作成するために書くshudどのようなコードこれは私のコード

connect usr/[email protected] 
SET NEWPAGE 0 
SET SPACE 0 
SET LINESIZE 80 
SET PAGESIZE 100 
COLUMN COLUMN1 HEADING 'LAST NAME' 
COLUMN COLUMN2 HEADING 'FIRST NAME' 
COLUMN COLUMN3 HEADING 'LOCATION' 
spool c:\temp\get_sums.csv 
SELECT COLUMN1 
    ,COLUMN2 
    ,COLUMN3 
    ,COLUMN4 
    ,COLUMN5 
    , COLUMN6 
    ,COLUMN7, 
    COLUMN8 
    ,COLUMN9 
FROM TABLE(ACTY_SUMM('09-NOV-2010','12-NOV-2010')) 
/
spool off 
exit; 
です

私は、行のサイズを変更し、ページサイズを変更しました。しかし、望ましいフォーマットを得ることができません。私は12列あります。私はレポート形式でそれが必要です。

こんにちは私はラインサイズを変更しようとしましたが、依然として希望のフォーマットが得られていません。私は、次の形式でレポートをしたい、私はすべて1行の列と、各列の下に、それぞれの場所の後に一人一人のそれに対応する値の位置の合計があるでしょうし、最後に補助金があるでしょうが必要

FirstNAME LASTNAME LOCATION A B C D E F G H I 
NAME1  LNAME1 LOC1  A1 B1 C1 D1 E1 F1 G1 H1 I1 
NAME2  LNAME2 LOC1  A2 B2 C2 D2 E2 F2 G2 H2 I2 
        LOCTOT 
NAME3  LNAME3 LOC2  A3 B3 C3 D3 E3 F3 G3 H3 I3 
        LOCTOT 

合計。私は、ラインサイズ、ページサイズ、およびすべてを試しました。まだ結果はありません。誰もがcsv形式でokです私は今クライアントのように、この形式のレポート

こんにちは

を取得することができます。しかし、挑戦は私が見出しを取得していないということです。これはSQLスクリプトのコードです。

connect usr/[email protected] 
SET NEWPAGE 0 
SET LINESIZE 100 
SET PAGESIZE 0 
spool c:\temp\q1.csv 

COLUMN COLUMN1 HEADING 'LAST NAME' 
COLUMN COLUMN2 HEADING 'FIRST NAME' 
COLUMN COLUMN3 HEADING 'LOCATION' 
COLUMN COLUMN4 HEADING 'A' 
COLUMN COLUMN5 HEADING 'B' 
COLUMN COLUMN6 HEADING 'C' 
COLUMN COLUMN7 HEADING 'D' 
COLUMN COLUMN8 HEADING 'E' 
COLUMN COLUMN9 HEADING 'F' 
COLUMN COLUMN10 HEADING 'G' 
COLUMN COLUMN11 HEADING 'H' 
COLUMN COLUMN12 HEADING 'I' 
SELECT 
    '"'||COLUMN1 
    ||'","'|| COLUMN2 
    ||'","'|| COLUMN3 
    ||'","'|| COLUMN4 
    ||'","'|| COLUMN5 
    ||'","'|| COLUMN6 
    ||'","'|| COLUMN7 
    ||'","'|| COLUMN8 
    ||'","'|| COLUMN9 
    ||'","'|| COLUMN10 
    ||'","'|| COLUMN11 
    ||'","'|| COLUMN12||'"' 
FROM 
TABLE(ACTY_SUM('09-NOV-2010','12-NOV-2010')) 
/

spool off 
exit; 

あなたは最初のクエリを実行するスクリプトを作成し、この問題

+0

あなたは常にto_dateと日付リテラルの書式を使用するべきです。デフォルトの日付形式に依存することは非常に危険です。異なるクライアントでは頻繁に異なります。 –

+0

私は – Remya

答えて

3

に提案してくださいすることができます。出力をファイルにキャプチャする必要があるため、SPOOLコマンドを使用します。

connect usr/[email protected] 
spool c:\temp`get_sums.lst 

SELECT 

    COLUMN1 AS "LAST NAME", 
    COLUMN2 AS "FIRST NAME", 
    COLUMN3 AS "LOCATION" 

FROM TABLE(PKG.GET_SUM('09-NOV-2010','12-NOV-2010')) 
/

spool off 
exit; 

get_sums.sqlという名前のファイルに保存します。そして、あなたはこのようにget_sums.batバッチファイルが必要です。

sqlplus /nolog @C:\get_sums.sql 

様々なSQL * Plusがありますが、あなたが.sqlファイルtの形式で出力を含めることができるコマンド。 Find out more


明らかに書式設定ドキュメントへのリンクでは不十分です。

LINESiZEを80に設定すると、デフォルトになりません。 9つの列を選択していて、9つの値すべてを1行に表示するには、LINESIZEを設定して、すべての列に対応できる長さにする必要があります。これは、LINESIZEを、すべての列の幅と8の間のスペース(ninbe列間の間隙スペースの数)の合計に設定する必要があることを意味します。

私はあなたがこれは選択されたすべての列がレポートをレイアウトする非常に珍しい方法である一つの長い行、で一緒に実行するようになり

SET SPACE 0 

を試してみましたが、ご覧ください。しかし、それが本当に必要な場合は、LINESIZEの正しい値を計算する際に間隙スペースを無視してください。


投稿コードがフォーマットされていると、.csvに出力されています。最初にカンマ区切りの値をエクスポートしたかったのはなぜですか?

これを行う方法はいくつかあります。最も簡単にはカンマを使用して、クエリの投影を連結することである。

SELECT 
    '"'||COLUMN1 
    ||'","'|| COLUMN2 
    ||'","'|| COLUMN3 
    ||'","'|| COLUMN4 
    ||'","'|| COLUMN5 
    ||'","'|| COLUMN6 
    ||'","'|| COLUMN7 
    ||'","'|| COLUMN8 
    ||'","'|| COLUMN9 ||'"' 
FROM TABLE(ACTY_SUMM('09-NOV-2010','12-NOV-2010')) 
/

二重引用符は、コンマを含む任意の文字列の列を処理するオプションのフィールドターミネータ、です。


ここ

をいくつかのテストデータである "私は昏睡区切り値をたくないI 私のポストを編集し提案してください。。":

SQL> select * from t23 
    2/

♀FIRSTNAME   LASTNAME    LOCATION A B C D E F 
-------------------- -------------------- ---------- -- -- -- -- -- -- 
G H I 
-- -- -- 
NAME1     LNAME1    LOC1  A1 B1 C1 D1 E1 F1 
G1 H1 I1 

NAME2     LNAME2    LOC1  A2 B2 C2 D2 E2 F2 
G2 H2 I2 

NAME3     LNAME3    LOC2  A3 B3 C3 D3 E3 F3 
G3 H3 I3 


SQL> 

私は基本的に生成することができますSQL * Plusの書式設定コマンドを使用して必要なレイアウト

SQL> set linesize 100 
SQL> break on location 
SQL> compute count of location on location 
SQL> compute count of location on report 
SQL> r 
    1* select * from t23 
♀FIRSTNAME   LASTNAME    LOCATION A B C D E F G H I 
-------------------- -------------------- ---------- -- -- -- -- -- -- -- -- -- 
NAME1     LNAME1    LOC1  A1 B1 C1 D1 E1 F1 G1 H1 I1 
NAME2     LNAME2       A2 B2 C2 D2 E2 F2 G2 H2 I2 
              ---------- 
                2 
NAME3     LNAME3    LOC2  A3 B3 C3 D3 E3 F3 G3 H3 I3 
              ---------- 
                1 

SQL> 
+1

+1の形式で日付を使用していません。また、EXIT後にCRLFを覚えておいてください。それ以外の場合は、 "ハングする"(コマンドは送信されません) – Ronnis

+0

こんにちは、この行は "spool c:\ temp'get_sums.lst"のようなものですか、スプールc:\ temp \ get_sums.txtのようなものですか? CRLFとは、説明してください。 – Remya

+0

exitコマンドの後に空白行を追加してください。それ以外の場合は、EXITはsqlplusで消費されません。 – Ronnis

関連する問題