2017-08-16 1 views
0

J'ai ci-dessous sélectionnez requête pour laquelle le résultat de cette requête je veux créer des scripts d'insertion et enregistré dans des fichiers. J'ai utilisé la bobine.spool pour insérer dans le développeur sql ne fonctionne pas

set long 10000 
set lines 100000 
set sqlformat insert 
spool c:\temp\Insert_TEST_GRP.sql 
select ID,NAME,TEST_DATE from TEST_GRP sd 
where TEST_DATE = 
(select min(TEST_DATE) 
    from TEST_GRP sd2 
    where sd.ID = sd2.ID  
) 
and sd.TEST_DATE <> TO_DATE ('01.01.2000', 'dd.mm.yyyy'); 
spool off 

Le fichier a été créé. Mais quand je regarde le dossier j'obtiens le résultat qui n'est pas sous la forme d'instructions d'insertion comme je veux courir cette instruction d'insertion encore.

Ci-dessous Hows les données ressemble dans le fichier qui ressemble au format incorrect: enter image description here

+0

Peut-être nous montrer les données incorrectement formatées, et ce que vous attendez? – OldProgrammer

+1

Également peut-être mentionner quelle version de SQL Developer vous utilisez, et comment vous visualisez le fichier spoule. Avez-vous une erreur de 'set sqlformat insert' peut-être, si vous utilisez une version très ancienne? –

+0

merci Alex j'ai compris que le problème est avec ma version développeur SQL. Je cours la version plus ancienne i.e v3.0.Mais quand je vérifie maintenant dans une version supérieure, cela fonctionne parfaitement. – Andrew

Répondre

2

Nous n'avons pas accès à votre table ni à vos données.

Mais ici, il travaille avec le schéma de démonstration HR et sa table EMPLOYEES

set sqlformat insert 
spool c:\users\jdsmith\desktop\SO_inserts.sql 
select * from employees; 
spool off 

enter image description here

Vous utilisez SET LONG - Votre tableau ont LOBS en elle?

Aussi, je remarqué que vous posé cette même question sur le OTN Forums ...

+0

J'ai supprimé ensemble long 10000, définir les lignes 100000 mais toujours pas obtenir le résultat dans le bon format. J'ai mentionné dans ma question le résultat que j'obtiens – Andrew

+0

Sans votre table et vos données TEST_GRP, il nous sera impossible de vous aider. – thatjeffsmith

+0

pouvez-vous s'il vous plaît dites-moi comment vous l'exécutez dans le développeur sql? Je cours en utilisant la touche F5. J'obtiens le résultat mais le format de résultat n'est pas correct. – Andrew

1

Vous devez retourner une chaîne qui est l'instruction INSERT formaté avec les colonnes dont vous avez besoin. Exemple

set long 10000 
set lines 100000 
set sqlformat insert 
spool c:\temp\Insert_TEST_GRP.sql 
select 'INSERT INTO TEST_GRP (ID,NAME,TEST_DATE) VALUES (' || 
    ID||','||NAME||',' || TEST_DATE||');' 
from TEST_GRP sd 

where TEST_DATE = 
(select min(TEST_DATE) 
    from TEST_GRP sd2 
    where sd.ID = sd2.ID  
) 
and sd.TEST_DATE <> TO_DATE ('01.01.2000', 'dd.mm.yyyy'); 
spool off 

Si vous utilisez sqldeveloper, vous pouvez simplement utiliser la fonction intégrée dans l'exportation et l'exportation de la grille de résultat comme inserts.

+0

Le 'set sqlformat insert' devrait signifier que vous n'avez pas besoin de construire manuellement les instructions d'insertion. (Et si vous le faites, vous devez envisager d'ajouter des guillemets simples et doubles autour des chaînes, formats de date, etc.) –

+0

merci de son travail, mais quand je vois l'instruction d'insertion et essayé de l'exécuter, je reçois une erreur comme erreur SQL: ORA-00917: virgule manquante. Il y a une colonne de date et dans le champ des valeurs, elle n'est pas considérée comme une chaîne mais comme un format numérique comme 17-JAN-17 12.00.00. Comment puis-je faire de la chaîne? – Andrew

2

La méthode set sqlformat pour formater votre requête was added in version 4.1 résultats.

Si vous êtes sur une version antérieure (par exemple 3.0 comme vous l'avez dit dans un commentaire), alors il se plaindrait, ce que vous semblez avoir ignoré; par exemple. à 4,0:

set sqlformat insert 

obtient ceci dans la fenêtre de sortie de script:

line 1: SQLPLUS Command Skipped: set sqlformat insert 

La méthode /*insert*/ était disponible plus tôt que:

select /*insert*/ * from dual; 

qui obtient

REM INSERTING into dual 
SET DEFINE OFF; 
Insert into "dual" (DUMMY) values ('X'); 

(ne pas vraiment essayer d'insérer dans dual, bien sûr). Vous pouvez également utiliser l'assistant d'exportation (outils-> exportation de base de données); ou exécutez votre requête avec control-enter, faites un clic droit sur la grille de sortie et choisissez 'export' (bien que it may repeat the query).

La mise à niveau vers la version actuelle est cependant une bonne chose à faire.