SQL Abfrage nur ausführen und in Datei ausgeben, wenn Tabelle Einträge enthält

CuNoah

Cadet 4th Year
Registriert
Aug. 2009
Beiträge
85
Hallo zusammen,

habe momentan folgendes Script, dass ich über ein Batchfile per sqlplus aufrufe. Funktioniert auch ohne Probleme.
Ich möchte das ganze jetzt nur erweitern, damit die Datei nur erstellt wird, wenn in der Tabelle Einträge vorhanden
sind. Möchte also vermeiden, dass leere Dateien erstellt werden.

Wie würdet ihr an der Stelle vorgehen? Hab schon probiert über select count(*) die Anzahl in eine Variable zu schreiben und diese dann über case auszuwerten. Leider bis jetzt nicht erfolgreich.

Mein Ziel wäre, dass ich nur eine Datei mit der Ausgabe erhalte, wenn in der Tabelle Einträge vorhanden sind. Gibt es evtl. eine andere, einfachere Möglichkeit?

Vielen Dank.

SQL:
set feedback off
set heading off

SPOOL C:\Script\ausgabe.txt

select * from tabelle;

SPOOL OFF

exit;
 
Edit: Ursprünglicher Vorschlag gelöscht

Würde mich trotzdem mal hier einlesen: https://de.wikibooks.org/wiki/Oracle:_SQL*PLUS

Ich denk nochmal über eine Lösung nach. Vielleicht ist es ja möglich ein select count(*) in eine Variable zu speichern und wenn diese 0 ist ist die Tabelle leer. Hat das Schreiben in die Variable nicht geklappt oder die Auswertung mit case?

Grüße,
Dizzard
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: CuNoah
Danke für den Link, den kannte ich nicht :)

Bei meiner Idee konnte ich die CASE Anweisung nicht entsprechend aufbauen, habe meinen letzten Stand gerade nicht da, aber wenn es von der Grundidee nicht so verkehrt ist, poste ich den später, evtl. fehlt ja nur eine Kleinigkeit.
 
Im Output der Abfragen wird doch häufig die Anzahl der rows mit ausgegeben. Ich würde nachträglich einfach nach "0 rows" (o.ä.) parsen und dann die Datei schlicht löschen.
 
  • Gefällt mir
Reaktionen: CuNoah
Was spricht denn dagegen, die Datei zu löschen, wenn keine Datensätze enthalten sind? Das ist imho die einfachste Lösung.

Ansonsten gibt es auch die Möglichkeit vorher mit COUNT zu prüfen:
SQL:
column spool_destination noprint new_value spooldestination
SELECT DECODE(COUNT(*),0,'nul','C:\Script\ausgabe.txt')  AS spool_destination
  FROM tabelle;
spool &spooldestination
SELECT *
  FROM tabelle;
spool off
Original von hier: Spool file, only if data exists.
 
  • Gefällt mir
Reaktionen: CuNoah und Steueroase
Vielen Dank für alle Antworten.

Löschen der Datei, wenn keine Datensätze vorhanden sind, geht leider nicht so ohne weiteres, da die Datei von einem Folgeprozess weiterverarbeitet wird. Darauf hab ich leider keinen Einfluss.

Mit dem Beispiel von @Andreas_ klappt es perfekt :) Vielen Dank dafür. :daumen:
 
  • Gefällt mir
Reaktionen: Dizzard
Zurück
Oben