2010-12-14 17 views
0

Ich muss eine Fledermaus-Datei erstellen, die eine Abfrage zum Ausführen eines Pakets enthalten. Ich verwende plsql Entwickler, um das Paket zu entwickeln. Benutzername, Passwort und Datenbank sind Benutzer, pswd, db1. Die Abfrage das Paket auszuführen ist:zum Erstellen einer Bat-Datei zum Ausführen einer Abfrage

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

kann mir jemand helfen, welchen Code shud ich eine Fledermaus-Datei

Vielen Dank im Voraus

Dies ist mein Code erstellen schreiben

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; 

Ich änderte die Zeilengröße und Seitengröße. Aber nicht in der Lage, das gewünschte Format zu bekommen. Ich habe 12 Spalten. Ich brauche es in einem Berichtsformat.

Hallo Ich habe versucht, die Linesize zu ändern, aber ich bekomme immer noch nicht das gewünschte Format. Ich mag den Bericht in folgendem Format

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 

ich die ganze Spalte in einer Zeile müssen und ihre entsprechenden Werte der einzelnen Person unter jeder Spalte und nach jedem Standort gibt es Standort insgesamt sein und am Ende wird es Zuschuss gesamt. Ich habe versucht mit der Linesize, Seitengröße und allem. immer noch kein Ergebnis. Kann mir jemand helfen, den Bericht in diesem Format

Hallo

Ab sofort Client ist ok mit dem CSV-Format zu bekommen. Aber die Herausforderung ist, dass ich nicht die Überschrift bekomme. Dies ist mein Code in SQL-Skript.

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; 

Können Sie bitte zu diesem Thema vorschlagen

+0

Btw sollten Sie immer to_date und ein Format mit Datumsliteralen verwenden. Sich auf das Standard-Datumsformat zu verlassen ist sehr gefährlich, es ist häufig in verschiedenen Clients unterschiedlich. –

+0

Ich verwende kein Datum irgendwo im Format – Remya

Antwort

3

zunächst ein Skript erstellen, um die Abfrage auszuführen. Sie möchten die Ausgabe in einer Datei erfassen, daher der SPOOL-Befehl.

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; 

Speichern Sie das in einer Datei namens get_sums.sql. Dann brauchen Sie eine Batch-Datei get_sums.bat wie folgt aus:

sqlplus /nolog @C:\get_sums.sql 

Es gibt verschiedene SQL * Plus-Befehle Sie die Ausgabe in der SQL-Datei t-Format enthalten. Find out more.


Anscheinend ist ein Link zur Formatierungsdokumentation nicht ausreichend.

Es hat keinen Sinn, LINESiZE auf 80 zu setzen, das ist der Standardwert. Wenn Sie neun Spalten auswählen und alle neun Werte in einer Zeile angezeigt werden sollen, müssen Sie LINESIZE so einstellen, dass sie lang genug ist, um alle Spalten aufzunehmen. Das heißt, Sie müssen LINESIZE auf die Summe aller Spaltenbreiten plus acht setzen (die Anzahl der Zwischenräume zwischen den Ninbe-Spalten).

Obwohl ich sehe, Sie haben versucht,

SET SPACE 0 

Dies bewirkt, dass alle ausgewählten Spalten zusammen in einer langen Linie laufen, die von Auslegen eines Berichts eine sehr ungewöhnliche Art und Weise ist. Aber wenn Sie das wirklich wollen, dann ignorieren Sie die Interstitialräume, wenn Sie den richtigen Wert für LINESIZE berechnen.


Nachdem formatiert Sie Code geschrieben Ich sehe, dass Sie die Ausgabe auf .csv. Warum hast du nicht gesagt, dass du kommagetrennte Werte exportieren willst?

Es gibt mehrere Möglichkeiten, dies zu tun. Die einfachste ist, Ihre Abfrage Projektion mit Kommas verketten:

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

Die doppelten Anführungszeichen der optionalen Feldabbrecher sind, die keine Zeichenfolge Spalten verarbeiten, die Kommas enthalten.


"Ich nicht, Koma getrennt Werte möchte ich meinen Beitrag bearbeitet bitte vorschlagen.."

Hier sind einige Testdaten:

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> 

ich die grundlegende produzieren kann Layout, das Sie verwenden möchten SQL * Plus-Formatierungsbefehle

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. Merken Sie sich auch die CRLF nach EXIT. Sonst wird es "hängen" (Befehl nicht gesendet) – Ronnis

+0

Hi Ist diese Zeile nur "spool c: \ temp'get_sums.lst" oder ist es wie Spool c: \ temp \ get_sums.txt. und CRLF bedeutet, können Sie bitte erklären. Danke Ihnen – Remya

+0

fügen Sie einfach eine leere Zeile nach dem Beenden Befehl. Andernfalls wird EXIT nicht von sqlplus konsumiert. – Ronnis

Verwandte Themen