-
SQL nächste freie Nummer ermitteln
Hallo,
ich habe aus dem Forum ein tolle Sql-Routine bekommen und die nächste freie Personalnummer zu ermitteln.
Es wird die nächste freie Nummer zwischen 10000 und 99999 gesucht.
Ich hatte früher nur Penr als Keyfeld.
Wie verknüpfe ich diese Abfrage mit einem zusätzlichen Key (FINR)?
Mein Ziel ist es das die PENR eindeutig und unique ist.
Bei diversen Tests bekomme ich eine Penr zurück die bereits vergeben ist.
Code:
WITH LFDNBR (LEVEL)
AS (VALUES(10000)
UNION ALL
SELECT LEVEL + 1 FROM LFDNBR
WHERE LEVEL < 99999)
SELECT IFNULL(LEVEL, 0)
FROM LFDNBR
EXCEPTION JOIN PERP ON LEVEL = PENR
ORDER BY LEVEL
FETCH FIRST ROWS ONLY
Dank im Voraus
-
EXCEPTION JOIN PERP ON LEVEL = PENR and FINR = 'x'
Sicher und schnell ist das allerdings nicht, da immerhin mehrere 1000 Zugriffe gemacht werden müssen.
Andererseits werden auch Lücken (also Löschungen) wieder verwendet.
Besser ist da schon immer eine eigene Tabelle mit der Nummernvergabe.
Ganz extrem hatte ich mir mal eine Tabelle der Nummern von n bis m erstellt.
Beim Ermitteln die erste Nummer genommen und gelöscht, so dass auch kein 2. Prozess dieselbe Nummer noch mal vergibt.
Beim Löschen (am besten Trigger) wird die freie Nummer in die Tabelle zurückgeschrieben.
Die Vorteile sind da auf meiner Seite;-).
-
Entweder FiNr in den Group by mit reinbringen, so das du diese mit abfragen kannst. Oder anstatt mit einer CTE zu arbeiten eine Procedure mit FiNr als Eingangsparamter...
-
Zitat von Fuerchau
EXCEPTION JOIN PERP ON LEVEL = PENR and FINR = 'x'
Für was steht 'x'?
Finr sind bei uns 3-stellig.
Wenn ich ein Join auf eine logische Datei die den Key PENR hat und unique ist, würde das funktionieren?
@ExAzubi: Mit Group by habe ich es funktioniert, hat aber nicht das gewünschte Ergebnis gebracht.
-
Kommt auch etwas Schlankes in Frage?
Code:
SELECT min(a.penr)+1
from PERP a
left outer join PERP
b on a.penr = b.penr +1
where b.penr is null
mit FINR im unique key
Code:
SELECT min(a.penr)+1
from PERP a
left outer join PERP
b on a.penr = b.penr +1 and a.finr = b.finr
where b.penr is null and a.finr = '001'
-
Wie ist dann diese Frage zu verstehen?
"Wie verknüpfe ich diese Abfrage mit einem zusätzlichen Key (FINR)?"
Wenn die PENR bereits unique ist, wozu brauchst du die FINR?
Oder ist die PENR nur incl. FINR unique?
-
Mit dieser Statement habe ich eigentlich angefangen, aber die Nummern von 10475 bis 12000 sind frei und er leifert mir den wert 12002 zurück.
Code:
SELECT min(a.penr) + 1
FROM PERP a
left outer join PERP b
on a.penr = b.penr + 1
WHERE b.penr is null
and a.penr > 10000
-
Ich habe die Personaldatei die hat den Key FINR/PENR und ist unique.
Dann gibt es eine Logische die den Key PENR hat und auch unique ist.
-
Wenn FINR und PENR unique keys sind, dann ist natürlich der left outer join mit zusätzlich der FINR wichtig.
-
Danke für eure Hilfe und Input.
Ich habe es nun wie folgt gelöst:
Code:
WITH LFDNBR (LEVEL)
AS (VALUES(10000)
UNION ALL
SELECT LEVEL + 1 FROM LFDNBR
WHERE LEVEL < 99999)
SELECT IFNULL(LEVEL, 0)
FROM LFDNBR
WHERE LEVEL NOT IN (SELECT PENR FROM PERP)
EXCEPTION JOIN PERP ON LEVEL = PENR
ORDER BY LEVEL
FETCH FIRST ROWS ONLY
lg
Similar Threads
-
By AKS1 in forum NEWSboard Server Job
Antworten: 0
Letzter Beitrag: 22-04-18, 15:19
-
By Mida in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 09-02-18, 22:18
-
By Robi in forum NEWSboard Server Job
Antworten: 0
Letzter Beitrag: 17-01-18, 09:08
-
By K_Tippi in forum NEWSboard Server Job
Antworten: 1
Letzter Beitrag: 16-05-17, 08:47
-
By XMan in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 05-03-14, 09:54
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