-
SQL EXISTS Abfrage ausserhalb WHERE
Hallo,
ist es möglich eine EXISTS-Abfrage ausserhalb einer WHERE-Bestimmung eines SELECTs auszuführen? Ich benötige das in diesem Fall um in einem ILERPG-Programm herauszufinden, ob ein Satz exisitiert. Praktisch eine Ablösung von SETLL + %EQUAL.
Danke
M.Withake
-
Das läßt sich nur mittels normalem Select erledigen:
select count(*) into :mycount
from myfile
where .....
if mycount>*zero;
:
endif;
-
Das mit dem SELECT COUNT(*) ist nicht wirklich eine gute Lösung. Wenn es z.B. darum geht, ob ein Kunden in einer Auftragsdatei vorhanden ist und die Auftragssätze für diesen Kunden 100.000 Sätze oder mehr betragen, wird die Abfrage sehr lange dauern...
Alternativ hatte ich schon folgendes probiert:
SELECT 1
INTO :HOSTVARIABLE
FROM DATEI
WHERE EXSIST (SELECT * FROM DATEI WHERE bedingung)
FETCH FIRST ROW ONLY
Aber das ist auch nicht so schnell wie SETLL/%EQUAL.
-
select feldx into :myfeld
from datei
where < bedingung >
fetch first 1 rows only
if sqlcod = *zero; // Satz vorhanden
else;
endif;
ist schon der richtige Weg.
Wenn für "Bedingung" Zugriffspfade bestehen erfolgt der Zugriff auch schnell
Ggf. kann mit "optimize for 1 rows" noch etwas beschleunigt werden.
Allerdings wird nichts so schnell wie SETLL sein, da hier ja native über eine LF zugegriffen wird. Wobei ein CHAIN mit verkürztem Schlüssel noch schneller ist.
-
Hallo,
Rekord Löffel Exzess ist immer das sparsamste und damit bezogen auf eine atomare Operation das schnellste (da gibt es ein paar Marketing Aussagen, die das anders darstellen: Marketing halt...).
SQL kann dann Speed machen, wenn Zugriffe grob granular sind (ja, ein komplexer Join kann schneller sein als 76 read und chain und trulala). Auch ein Select count(*) wird bei entsprechender Hardware und Index Design schneller sein als nachzählen mit Rekord Löffel Exzess.
Der Rest an Speed in der Datenbank kommt aus dem Applikations Design (cachen von häufig gelesenen Sätzen, sinnige Zugriffslogik etc.) Letzteres führt dazu, dass im richtigen Leben mit SQL richtig Dampf gemacht werden kann, wenn man ausreichend Hardware hat.
mfg
Dieter Bender
Zitat von Fuerchau
select feldx into :myfeld
from datei
where < bedingung >
fetch first 1 rows only
if sqlcod = *zero; // Satz vorhanden
else;
endif;
ist schon der richtige Weg.
Wenn für "Bedingung" Zugriffspfade bestehen erfolgt der Zugriff auch schnell
Ggf. kann mit "optimize for 1 rows" noch etwas beschleunigt werden.
Allerdings wird nichts so schnell wie SETLL sein, da hier ja native über eine LF zugegriffen wird. Wobei ein CHAIN mit verkürztem Schlüssel noch schneller ist.
Similar Threads
-
By AS400-Anfänger in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 27-06-06, 13:18
-
By behmer in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 29-05-06, 12:52
-
By steven_r in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 17-05-06, 15:49
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-06-05, 16:21
-
By juergenkemeter in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 17-11-04, 14:32
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks