Tips und Techniken für die AS/400
Der 3. Teil der jährlichen Tips und Techniken jetzt online:
Thema: SQL
Blitz Links:
Berechnung der Anzahl von Tagen zwischen zwei Daten in SQL/400
Sortieren und Vergleichen in SQL/400 ohne Berücksichtigung der Groß/Kleinschreibung
Plazieren von SQL/400-Objekten in Benutzer-ASPs
SQL
Berechnung der Anzahl von Tagen zwischen zwei Daten in SQL/400
Wenn Sie die Anzahl der Tage zwischen zwei Daten in SQL/400 berechnen möchten, sollten Sie die Daten zunächst mit der Skalarfunktion Days (Tage) konvertieren, bevor Sie die Daten voneinander subtrahieren. Days nimmt ein Datumsargument und gibt die Anzahl der Tage seit dem ersten Januar 0001 zurück.
Mit der folgenden SQL-Anweisung wird eine Tabelle erstellt, die der Tabelle in Abbildung 6 entspricht:
Select CustID,
OrderID,
SaleDate,
ShipDate,
( Days( ShipDate ) –
Days( SaleDate ) ) As DaysToShip
From Sale
Where ShipDate Is Not Null
Order By CustID,
DaysToShip Desc
Vermeiden Sie Ausdrücke wie den folgenden, der als Ergebnis eine Zeitdauer ausgibt:
ShipDate – SaleDate
Wenn in SQL/400 ein Datum von einem anderen subtrahiert wird, ist das Ergebnis eine Zeitdauer (eine achtstellige Zahl im Format JJJJMMDD). Die folgenden Beispiele zeigen die ausgegebene Zeitdauer, wenn Sie den vorherigen Ausdruck auf die Werte in der Beispieltabelle anwenden:
SaleDate ShipDate ShipDate – SaleDate 1996-05-01 1996-05-15 14 1996-05-01 1996-05-15 10014 (1 Jahr, O Monate, 14 Tage)
Sortieren und Vergleichen in SQL/400 ohne Berücksichtigung der Groß/Kleinschreibung
Wenn Sie die „Order-By-Klausel“ in SQL verwenden und die Reihen anhand einer Buchstabenspalte sortieren, benutzt SQL/400 eine Sortiersequenz, um festzulegen, wie die Spaltenwerte sortiert werden sollen. Diese Sequenz wird mit dem Parameter SRTSEQ in den Befehlen STRSQL (SQL starten), RUNSQLSTM (SQL-Anweisung ausführen) oder CRTSQLxxx (SQL-Objekt erstellen) festgelegt. Parameter SRTSEQ (*LANGIDSHR) bestimmt eine von der Groß- und Kleinschreibung unabhängige Sortiersequenz. Der Spezialwert *LANGIDSHR legt fest, daß die „shared weight“-Sortiersequenz für die aktuelle Sprache (festgelegt mit dem Parameter LANGID) für sämtliche Buchstabenvergleiche verwendet wird. „Schmidt“, „SCHMIDT“ und „schmidt“ gelten daher als gleichwertig.
Wenn Sie mit CRTSQLxxx ein *MODULE-Objekt erstellen, gelten die Parameter SRTSEQ und LANGID für alle SQL-Anweisungen in dem Modul. Sie können mit dem Befehl CRTPGM (Programm erstellen) ein Programm erstellen, das die SQL-Module mit verschiedenen STRSEQ- und LANGID-Einstellungen kombinieren. Wenn Sie mit dem Befehl CRTSQLxxx ein *PGM- oder *SRVPGM-Objekt in einem Schritt erstellen, gelten die SRTSEQ- und LANGID-Parameter für alle SQL-Anweisungen in dem Programm oder Serviceprogramm.
Die SRTSEQ- und LANGID-Einstellungen gelten auch für Vergleiche in Where- und Having-Klauseln. Mit SRTSEQ(*LANGIDSHR) werden mit der folgenden Anweisung alle Angestellten mit Nachnamen „Schmidt“, „SCHMIDT“, „schmidt“ oder jeder beliebigen Kombination der Buchstaben s-c-h-m-i-d-t ausgewählt:
Select * From Employee Where LastName = "schmidt"
Wenn Sie einen von der Groß- und Kleinschreibung unabhängigen SQL-Index erstellen möchten, um damit die Leistung bei einer von Groß- und Kleinschreibung unabhängigen Auswahl und Bestellung zu verbessern, müssen Sie SRTSEQ(*LANGIDSHR) für die interaktive SQL-Sitzung oder den Befehl RUNSQLSTM festlegen, den Sie für die Create Index-Anweisung verwenden.
Plazieren von SQL/400-Objekten in Benutzer-ASPs
Mit Benutzer-ASPs (Benutzer-Zusatzspeicherpools) lassen sich die Performance und die Datenbank-Wiederherstellung verbessern. Ein ASP besteht aus einer Gruppe von Zusatzspeichereinheiten, die anhand spezieller Nummern in der Systemkonfiguration identifiziert werden. ASP 1 ist der System-ASP. Sie können ASP 2 bis 16 als Benutzer-ASPs erstellen. Weitere Informationen zum Erstellen von ASPs finden Sie in den Handbüchern Backup and Recovery (SC41-5304 für V4R1), Backup and Recovery – Basic (SC41-3304 für V3R2, SC31-4304 für V3R7) und Backup and Recovery – Advanced (SC41-3305 für V3R2, SC41-4305 für V3R7).
In den ASPs können Sie sowohl SQL/400-Objekte als auch mit CL-Befehlen erstellte Objekte speichern. Die beiden wichtigsten SQL/400-Verwendungszwecke sind das Speichern einer vollständigen SQL-Sammlung in einem Benutzer-ASP sowie das Speichern der Journalempfänger für das Journal einer Sammlung in einem Benutzer-ASP.
Beim Erstellen einer SQL/400-Sammlung plaziert das System standardmäßig die Sammlung und alle seine Objekte im System-ASP. Sie können eine weitere optionale „In ASP n“-Klausel hinzufügen, um einen Benutzer-ASP für die erstellte Sammlung zu bestimmen.
Beispiel:
Create Collection AppDta In ASP 2
Diese Anweisung weist das System an, das Journal und den Journalempfänger für die Sammlung sowie alle Tabellen, die nachfolgend in der Sammlung erstellt werden, im ASP 2 zu speichern. Das Speichern einer oder mehrerer Anwendungs-Sammlungen in einem eigenen ASP führt in einigen Systemkonfigurationen zur Isolation und damit zum Schutz, falls ein Fehler in Zusatzspeichereinheiten anderer ASPs auftritt. Außerdem lassen sich durch die Isolation Konflikte beim Plattenzugriff vermeiden. Allerdings ist es nicht möglich, eine Sammlung in einem ASP zu speichern und anschließend eine Tabelle aus der Sammlung in einem Journalempfänger eines anderen ASP zu protokollieren.
Wenn Sie eine Sammlung in einem systemdefinierten ASP speichern (der Standardvorgang mit Create Collection), können Sie anschließend die Journalempfänger in einem Benutzer-ASP plazieren. Die Trennung von Journalempfängern und den protokollierten Tabellen beschleunigt das Schreiben von Journaleinträgen. Außerdem bleibt der Journalempfänger weiter für eine eventuelle Wiederherstellung verfügbar, falls auf einem Zusatzspeichergerät mit einer protokollierten Tabelle ein Schaden auftritt.
Wenn Sie eine Sammlung erstellen, erstellt SQL/400 standardmäßig das Journal QSQJRN und den Journalempfänger QSQJRN0001 in der Sammlung. Außerdem protokolliert SQL/400 automatisch alle Basistabellen an QSQJRN, die Sie in der Sammlung erstellt haben. Sie können das Journal und die Journalempfänger mit den OS/400-Standard-Journalbefehlen und Menüs verwalten.
Gehen Sie folgendermaßen vor, wenn Sie die Journalempfänger von QSQJRN in einem Benutzer-ASP verwenden möchten:
- Geben Sie den Befehl WRKJRNA (Mit Journalattributen arbeiten) ein, um die Namen der derzeit angehängten Journalempfänger zu ermitteln.
WRKJRNA JRN(APPDTA/QSQJRN)
In dem folgenden Beispiel ist der angehängte Journalempfänger QSQJRN0012.
- Geben Sie den Befehl DSPJRNRCVA (Journalempfängerattribute anzeigen) ein, um die Attribute für den aktuellen Empfänger zu ermitteln.
DSPJRNRCVA JRNRCV(APPDTA/QSQJRNØØ12)
- Erstellen Sie einen neuen Journalempfänger in einem Benutzer-ASP. Richten Sie sich dabei nach der SQL-Namenskonvention von QSQJRNnnnn. Legen Sie die Attribute für den in Schritt 2 angezeigten Journalempfänger fest, zum Beispiel den Schwellenwert:
CRTJRNRCV + JRNRCV(APPDTA/QSQJRNØØ13) + ASP(2) THRESHOLD(1ØØØØ)
- Ändern Sie die Journalempfänger, so daß der neue Journalempfänger angehängt wird.
CHGJRN JRN(APPDTA/QSQJRN) + JRNRCV(APPDTA/QSQJRNØØ13 +
Im Anschluß an diese Anweisung empfängt der neue Journalempfänger Journaleinträge für das Journal QSQJRN.
- Sie können den herausgenommenen Journalempfänger (QSQJRNOO12) beim nächsten geplanten Backup speichern und auf Wunsch löschen.
- Geben Sie folgendes ein, wenn Sie nachfolgend die Journalempfänger für QSQJRN ändern möchten:
CHGJRN JRN(APPDTA/QSQJRN) + JRNRCV(*GEN) +
Daraufhin erstellt das System einen neuen Journalempfänger in ASP 2.
Ein vierter Teil folgt.
Mit freundlichen Grüßen- Ihr Burgy Zapp
![Künstler Burgy Zapp [http://burgyzapp.de]](http://newsolutions.de/it/wp-content/uploads//un6_IMG_2206-300x300.jpg)


