-
sql datenexistenz
Hi,
ich hab hier einen Ablauf, der nur staten darf, wenn es eine best. Datenkonstelation gibt.
Nun kann ich natürlich Datei 1 lesen, dann 2, dann 3 ... und am Ende verarbeiten, wenn alles vorhanden war.
Aber ich dachte mir, sei mal modern, nimm mal sql (im ILE)
also
set zahl = (select count(*) from ...
inner join ... inner join ...
where ...
OPTIMIZE for 1 Rows
(ich will ja nur wissen ob es mind 1 Satz gibt)
Das geht aber nicht.
Ebenso beim
select dateifeld into :var from ...
inner join ... inner join ...
where ...
OPTIMIZE for 1 Rows
mit max(Feldname) oder min() zu arbeiten währe ne Alternative.
Gibt's noch eine Möglichkeit 'schnell'
zu dem Ergebniss zu kommen?
Oder doch die 'unmoderne' alte Variante.
Danke
Euer ILEMax
-
select
(select count(*) from datei1 where ...)
,
(select count(*) from datei2 where ...)
:
into : Count1, : Count2 ...
from qibm.sysdummy1
-
Die schnellste Variante mit SQL ist:
Code:
/Free
clear MyVar;
Exec SQL Select 1 into :MyVar
From SysIbm/SysDummy1
where exists (Select 1
from ... inner join ...
... inner join ...
... inner join ...);
Etwas langsamger ist:
Code:
/Free
Clear MyVar;
Exec SQL Select 1 into :MyVar
from ... inner join ...
... inner join ...
... inner join ...
Fetch first row only;
Alles andere kannst Du vergessen.
Beide Methoden müssen aber immer noch langsamer sein als mehrere Chains oder SetLLs nacheinander auszuführen.
Ich vermute, Du hast Optimize for X Rows mit Fetch X Rows only verwechselt.
Optimize for X Rows ist das Optimierungsziel. Ist x eine kleine Zahl wird so optimiert, dass der 1. Block an Daten möglichst schnell zurückkommt. Bei einer sehr großen Zahl wird so optimiert, dass das Gesamt-Ergebnis möglichst schnell ermittelt wird. Ausschlag hat diese Angabe eigentlich nur, wenn der Optimizer überlegt ob Index-Access oder Table Scan.
Bei Select ... Into und Set mit Select-Statement muss sichergestellt werden, dass entweder genau 1 oder kein Datensatz zurückgegeben wird. Werden mehrere Datensätze zurückgegeben, wird ein negativer SQL code ausgegeben werden.
Birgitta
-
Danke Birgitta
/Free
clear MyVar;
Exec SQL Select 1 into :MyVar
From SysIbm/SysDummy1
where exists (Select 1
from ... inner join ...
... inner join ...
... inner join ...);
ok, versuch ich, danke
hört er in dieser Variante denn auf zu suchen, wenn der erste 'exists' gefunden wurde ?
ILEMax
-
hört er in dieser Variante denn auf zu suchen, wenn der erste 'exists' gefunden wurde ?
Yep ...
... allerdings steht und fällt das Ganze mit den richtigen/optimalen Zugriffs-Pfanden (Indices).
Deshalb gilt bei SQL immer analysieren, bevor das Ganze in Echt geht.
Birgitta
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By malzusrex in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 19-09-06, 11:04
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
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