
Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.
![]() |
Entweder war die Aufgabe zu schwer oder sie hat zu wenig Informix Interessenten angesprochen.
Nur zwei brauchbare Lösungen bekam Larry Ratlos auf sein Problem aus der letzten ORDIX News zugesandt. Die beiden Gewinner sind Herr Dieter Brandt, T-Systems Nova GmbH und Herr Andreas Wagener, Hutchison Telecom GmbH. Herzlichen Glückwunsch!
Sie wurden von uns bereits mit einem kleinen Geschenk und einem Gutschein für unsere Schulungen honoriert. Einer von beiden hat den Gutschein übrigens schon eingelöst und am Oracle-Seminar für Informix Umsteiger teilgenommen. Unsere Musterlösung sowie die beiden eingesendeten, ebenfalls korrekten Leser-Lösungen, finden Sie unten stehend.
Von der geringen Resonanz wenig beeindruckt, widmet sich Larry wieder seinen eigentlichen Aufgaben als JAVA Entwickler. Dabei ist er nun ziemlich schnell auf folgendes Problem gestoßen:
In seinem Java-Programm hat er eine hierarchische Datenstruktur aufgebaut, die aus ineinander verschachtelten Listen aufgebaut ist. Die Listenelemente sind also entweder selbst Listen oder einfache String-Objekte. Diese Datenstruktur möchte er gerne als Baum auf der Kommandozeile ausgeben. Leider fehlt ihm die Idee, wie man (frau) das elegant anstellen kann?
In der Datei TreeOutput.java finden Sie Larrys Java-Programm mit der (noch) leeren printData-Methode. Eine Beispiel-Kommandozeilenausgabe, die Larry als Vorlage gefunden hat, sieht folgendermaßen aus:
Wurzel |--Die | |--Ausgabe | |--scheint | | |--so | |--richtig |--programmiert | |--zu |--sein ;)
Genau so stellt er sich das Ergebnis vor!
Bevor Larry Ratlos sich die Lösung selbst erarbeitet - nachdem er an unserem JAVA Kurs teilgenommen hat - sollten Sie ihm schnell unter die Arme greifen. Auch dieses Mal werden wir neben der Lösung eines Java-Spezialisten aus dem Hause ORDIX die drei besten, eingesendeten Lösungen vorstellen. Für die Gewinner gibt es wieder etwas Interessantes zu gewinnen. Schicken Sie die Lösung einfach an kniffel@ordix.de.
Viel Spaß beim Rätseln!
Die Redaktion
| Auflösung aus Ausgabe 1/2003 Kurz und schmerzlos: |
# Funktion list_datenbanken() ermittelt alle DB Namen
list_datenbanken() {
dbaccess sysmaster - <<EOF
output to PIPE "cat" without headings
select name from sysdatabases where name not in (‘sysmaster’, |
Zur Erinnerung: In der letzten Ausgabe stand Larry Ratlos vor dieser Aufgabe:
Erstellen Sie ein Shellskript, das auf einfache Art eine Liste aller Stored Procedures, die Datenbank, in der sie liegen, den Eigentümer und natürlich den jeweiligen Stored Procedure Source Code ausgibt, mit Ausnahme der "Systemdatenbanken".
Larry wollte aber auf keinen Fall mehr als 30 Zeilen verwenden und hatte den Anspruch, es so aufzubauen, dass es leicht zu lesen ist - schließlich will er ja auch in ein paar Monaten nochmal drauf gucken können und gleich wieder wissen, wie es funktioniert ;^).
| Dieses Skript wurde eingesandt von Dieter Brandt aus Bielefeld. |
#!/usr/bin/ksh
TEMP=/tmp/$(basename $0)$$
# Datenbanken zusammenstellen
dbaccess sysmaster - > $TEMP.out 2>
$TEMP.err <<dbaccess!
UNLOAD TO $TEMP.dblist DELIMITER ’ ’
SELECT name FROM ‘informix’.sysdatabases WHERE owner != ‘informix’;
dbaccess!
while read dbname
do
# Stored Procedures zusammenstellen
dbaccess $dbname - > $TEMP.out 2> $TEMP.err <<-dbaccess!
UNLOAD TO $TEMP.procidlist DELIMITER ‘ ‘
SELECT procid, procname, owner FROM ‘informix’.sysprocedures;
dbaccess!
while read procid procname owner
do
# Source Code zusammenstellen
dbaccess $dbname - > $TEMP.out 2> $TEMP.err <<-dbaccess!
UNLOAD TO $TEMP.datalist SELECT data FROM ‘informix’.sysprocbody
WHERE procid = $procid AND datakey = ‘T’
dbaccess!
awk ’{l=substr($0,1,length-1);
if(/\|$/){printf l}
else{print l}
}END{printf "\n"}’ $TEMP.datalist > $TEMP.data
print database=$dbname
print procedure=$procname
print owner=$owner
cat $TEMP.data
done < $TEMP.procidlist
done < $TEMP.dblist
rm -f $TEMP.*
print "Ende"
|
| Dieses Skript wurde eingesandt von Andreas Wagener aus Münster. |
#!/bin/ksh
TMPFILE=/tmp/dbname.$$
TMPFILE2=/tmp/procname.$$
echo "unload to $TMPFILE select name from sysdatabases
where name not like ‘sys%’"
| dbaccess sysmaster 2>/dev/null
sed ‘s/|$//’ $TMPFILE | while read DBName
do
echo
echo "Datenbank : "$DBName
echo "unload to $TMPFILE2 select procname, owner from sysprocedures
where procname<>’systdist’;"
| dbaccess $DBName 2>/dev/null
sed ‘s/|/ /g’ $TMPFILE2 | while read ProcName ProcOwner
do
echo
echo "Procedure : "$ProcName
echo "Owner : "$ProcOwner
echo "Code :"
dbschema -d $DBName -f $ProcName | tail +5
done
done
rm $TMPFILE $TMPFILE2
|