Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  2/2009  Pfeil  Aktuell
suche: 

ORDIX News Archiv

Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.

Weiterführende Links



Larry Ratlos

Larry und sein Excel-/ Datenbank Problem


Die Finanzkrise hat auch Larry Ratlos Firma erreicht. Seine alte Abteilung wurde aufgelöst. Weil er bisher ganz schnell auch dank der Hilfe der ORDIX News Leser seine Probleme lösen konnte, wurde er aber in eine andere Abteilung übernommen. Sein neuer Abteilungsleiter heißt Bruus, von allen Mitarbeitern auch Bruus Willes genannt, weil "Bruus will es in Excel". Also egal was es ist, am Schluss muss eine Excel-Liste bei Bruus ankommen.

Aus der Datenbank in Excel

Der Vorgänger von Larry hatte eine schöne Datenbankanwendung mit Web-Oberfläche und tollen Reports angelegt. Aber die Reports interessierten Bruus nicht, er möchte am Monatsende von jedem Mitarbeiter eine Excel-Liste mit Tätigkeiten.

Also hat Larrys Ex-Kollege ein Shell-Skript geschrieben, das die Daten aus der Datenbank in eine CSV Datei entlädt, die man in Excel öffnet. Mit einem Makro wird dann Bruus Willes-in-Excel-Liste erstellt.

Zum Monatsende gibt Larry seine Stunden ein und startet das Skript, lässt das Makro laufen und stellt fest, dass Bruus das so nicht gut finden wird (siehe Abbildung 1). Das Skript hat Larry schnell gefunden (siehe Abbildung 2). "Aha", denkt er sich, "Informix - vermutlich musste mein Vorgänger deshalb gehen. Bei uns wird doch heute alles mit Oracle gemacht."

Datenformat nicht ok?

Die Ursache hat Larry auch schnell festgestellt: Die Unload-Datei (siehe Abbildung 3) wird Excel nicht so richtig "verstehen". "Eigentlich müsste man das zwar auch mit SQL so hinbekommen", denkt sich Larry, "aber schneller bin ich, wenn ich es in der Shell mit AWK oder Perl mache". Also einfach mal schnell die Unload-Datei transformieren und schon bekommt Bruus seine Excel-Liste.

"Dazu muss ich ja nur \; eliminieren und die Mehrzeiler für Excel verständlich machen", sagt sich Larry.

Gerade als Larry loslegen möchte, bekommt er eine Mail von Bruus, dass er die letzte Excel Liste mit der Hardware-Inventur überprüfen soll. "Wo bekomme ich nur die letzte Excel Liste her? Und warum macht man das eigentlich in Excel und nicht mit einer Datenbank, wo problemlos mehrere daran arbeiten können?".

Da aber Bruus schon über den Flur tobt, macht sich Larry lieber auf die Suche nach der letzten Excel-Liste, die irgendwo beim Einkauf auf einem PC liegen soll. Er hofft nur, dass es kein Ausdruck, sondern eine Liste in digitaler Form ist.

Was ist dann nächstes Quartal, wenn alles mit Oracle gemacht wird?

Bei seinen Recherchen ist Larry doch noch auf ein Entlade-Skript für eine Oracle Datenbank gestoßen. Oh, dann hat sein Vorgänger es doch schon portiert. Nach einem kurzen Blick (siehe Abbildung 4) ist Larry aber der Meinung, dass es doch manchmal besser ist, bei Informix zu bleiben.

Können Sie Larry helfen?

Larry ist anderweitig beschäftigt. Können Sie ihm helfen, eine Entlade-Datei für das Excel-Makro zu erzeugen, damit Bruus Willes-in-Excel am Monatsletzten seine Excel-Datei bekommt? Schicken Sie Ihren Lösungsvorschlag bis zum 7. August 2009 an kniffel@ordix.de.

Abb. 1: CSV Datei, nachdem das Makro gelaufen ist. Vergrößern
Abb. 2: Das Bruus Willes Shell-Skript, um die CSV-Datei zu erzeugen und zu verschicken.
Abb. 3: Die CSV-Datei, wie sie sich z. B. im VI präsentiert.
Abb. 4: SQL-Skript für Oracle.

Lösung der Aufgabe aus 1/2009

Im letzten Kniffel fühlte sich Larry von seiner Datenbank ein bisschen veräppelt, da sie plötzlich eine Fehlermeldung bei einem Select ausgab, der vorher immer funktioniert und zum gewünschten Ergebnis geführt hatte.

Bisher standen offensichtlich immer nur "reine" Zahlen in der betreffenden Spalte. Damit hat eine implizite Umwandlung vom Datentyp Charakter auf den Datentyp Integer stattgefunden, was die Abfrage bis dahin immer ermöglicht hatte.

Wird nun aber in der Spalte in irgendeiner Zeile ein nicht-numerisches Zeichen eingetragen, findet keine Konvertierung mehr statt und es erscheint eine Fehlermeldung.

Um das Problem zu lösen, sollte Larry seinen select so formulieren:

SQL> select * from tab_xy where col_z='12345';