2010-12-14 54 views
0

Je dois créer un fichier bat qui inclut une requête pour exécuter un paquet. J'utilise le développeur de plsql pour développer l'emballage. son nom d'utilisateur, mot de passe et base de données est l'utilisateur, pswd, db1 respectivement. La requête pour exécuter le package est:pour créer un fichier bat pour exécuter une requête

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

quelqu'un peut me aider quel code shud j'écris pour créer un fichier bat

Merci à l'avance

Ceci est mon code

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; 

J'ai changé la taille de la ligne et la taille de la page. Mais pas en mesure d'obtenir le format souhaitable. J'ai 12 colonnes. J'en ai besoin dans un format de rapport. Bonjour, J'ai essayé de changer la taille de la ligne, mais je n'obtiens toujours pas le format désiré. Je veux que le rapport dans le format suivant

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 

je besoin de toute la colonne dans une ligne et leurs valeurs correspondantes de chaque personne sous chaque colonne et après chaque emplacement, il y aura lieu au total et à la fin il y aura subvention total. J'ai essayé avec la taille de la ligne, la taille de la page et tout. toujours pas de résultat. Quelqu'un peut-il me aider à obtenir le rapport dans ce format

Salut

A partir de maintenant client est ok avec le format csv. Mais le défi est que je ne reçois pas le titre. C'est mon code en script 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; 

Pouvez-vous s'il vous plaît suggérer à ce sujet

+0

Btw vous devriez toujours utiliser to_date et un format avec des littéraux de date. S'appuyer sur le format de date par défaut est très dangereux, il est souvent différent dans différents clients. –

+0

Je n'utilise aucune date dans le format – Remya

Répondre

3

d'abord créer un script pour exécuter la requête. Vous voudrez capturer la sortie dans un fichier, d'où la commande 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; 

enregistrer dans un fichier appelé get_sums.sql. Ensuite, vous avez besoin d'un fichier batch get_sums.bat comme ceci:

sqlplus /nolog @C:\get_sums.sql 

Il existe plusieurs SQL * Plus les commandes que vous pouvez inclure dans le format de fichier sql t la sortie. Find out more.


Apparemment, un lien vers la documentation de mise en forme n'est pas suffisant.

Il ne sert à rien de régler LINESiZE sur 80, c'est le réglage par défaut. Si vous sélectionnez neuf colonnes et que vous souhaitez que toutes les neuf valeurs apparaissent sur une ligne, vous devez définir LINESIZE pour qu'il soit suffisamment long pour accueillir toutes les colonnes. Cela signifie que vous devez définir LINESIZE sur la somme de toutes les largeurs des colonnes plus huit (le nombre d'espaces interstitiels entre les colonnes ninbe).

Bien que je vois que vous avez essayé

SET SPACE 0 

Cela provoque toutes les colonnes sélectionnées pour exécuter ensemble dans une longue ligne, ce qui est une façon très inhabituelle de poser un rapport. Mais si c'est vraiment ce que vous voulez, ignorez les espaces interstitiels lorsque vous calculez la valeur correcte pour LINESIZE.


Après avoir formaté vous avez publié le code, je vois que vous délivrer en sortie .csv. Pourquoi n'avez-vous pas dit que vous vouliez exporter des valeurs séparées par des virgules en premier lieu?

Il existe plusieurs façons de procéder. Le plus simple est de concaténer la projection de votre requête avec des virgules:

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

Les guillemets doubles sont les terminateurs sur le terrain en option, qui se chargera de toutes les colonnes de chaîne qui contiennent des virgules.


"Je ne veux pas coma valeurs seperated Je édité mon post S'il vous plaît Suggest.."

Voici quelques données de test:

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> 

je peux produire la base mise en page que vous voulez utiliser les commandes de formatage 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. Souvenez-vous également du CRLF après EXIT. Sinon, il va "se bloquer" (commande non envoyée) – Ronnis

+0

Salut Est-ce que cette ligne n'est que "spool c: \ temp'get_sums.lst" ou est-ce comme spool c: \ temp \ get_sums.txt. et CRLF signifie Pouvez-vous s'il vous plaît expliquer. Merci – Remya

+0

juste ajouter une ligne vide après la commande de sortie. Sinon, EXIT ne sera pas consommé par sqlplus. – Ronnis