Forum: Datenbanken
by jobo,
7. Dez 2016
Also von Lückenlosigkeit war seitens des TE keine Rede. Dazu müssen wir uns in diesem Thread nicht den Kopf zerbrechen (es gibt dazu genug eigene Threads).
Datumsteile dagegen als Bestandteil der Rechnungsnummer und die fortlaufende Nummer mit Reset und Eindeutigkeit war eine Anforderung.
Da ist ein Hinweis zur Sinnhaftigkeit sicher nicht verkehrt. Aber zu sagen ~"..diese Anforderung...
Forum: Datenbanken
by jobo,
6. Dez 2016
Eine solche logische Sperre würde doch nichts an dem Multiuser Problem ändern (das es m.E. gar nicht gibt), sondern es nur verschieben.
Gäbe es das Multiuser-Zugriffs-Problem, würde es beim Statusupdate genauso auftreten, also nur bei einem anderen Updatebefehl.
Forum: Datenbanken
by jobo,
6. Dez 2016
Mach ich auch, zusätzlich aber noch ein Update auf eine Merkertabelle für den Datumswechsel.
Forum: Datenbanken
by jobo,
6. Dez 2016
@himitsu
Genau das habe ich ja gemacht und es wird angezweifelt, dass es mutliuser fähig ist.
Forum: Datenbanken
by jobo,
6. Dez 2016
Nach meinem Verständnis läuft das automatisch in einer Transaktion ab und würde keine Probleme bereiten. Dafür ist ja der Generator und Transaktionsicherheit da.
Notfalls mal ausprobieren und ein paar Consolen öffnen die in einer Loop Werte anfordern. Dazwischen manuel das Datum zurücksetzen. Dabei sollte nur eine einzige Sitzung einen Sequenzreset "erleben" und natürlich alle Sitzungen in...
Forum: Datenbanken
by jobo,
5. Dez 2016
naja, einmal im Monat :)
Mitternacht, am letzten Tag des Monats.
Ok, also ernst:
Eine lazy Variante wäre, das auf dem Server durch einen (Cron)Job durchführen zu lassen.
Dabei besteht leider die Gefahr, dass der Job fehlschlägt, das müsste man absichern.
Ich würde es wohl eher so machen, den gesamten Ausdruck, der die Nummer generiert, als Funktion abzurufen. Darin wird die Datumsgrenze...
Forum: Datenbanken
by jobo,
5. Dez 2016
insert into mytable
values (1, -- id
'rn#_'||CAST(Extract(year FROM cast('NOW' as date))*10000 +
Extract(month FROM cast('NOW' as date))*100 +
Extract(day FROM cast('NOW' as date)) AS VARCHAR(8))||
LPAD (gen_id(gen_rn,1), 6, '0'), ...
Forum: Datenbanken
by jobo,
5. Dez 2016
Ja, meinetwegen, ist ein wenig schwarz gemalt, aber wie auch immer.
Diese Anforderungen ergeben sich ja nicht primär daraus, dass der verantwortliche Buchhalter Nummerologe ist. Oft sind es eher Sachzwänge aus irgendwelcher Legacy Software, was weis ich. Die Anforderung hat der TE gesetzt oder das Tochterunternehmen, ...
Ich würde an der Stelle keine Sachzwänge durch einen Datentyp in Kauf...
Forum: Datenbanken
by jobo,
5. Dez 2016
Ich würde einen String nehmen, dann ist mir alles andere egal (außer die maximale Länge, die für eine unbeschwerte Zukunft doch noch irgendwie bestimmt/"geraten" werden müsste). Damit hätte ich dann mit einer beliebigen Formatmaske pro Mandant / Konfiguration dann alle Freiheiten.
Forum: Datenbanken
by jobo,
5. Dez 2016
Eine Rechnungsnummer ist eine fachliche Anforderung, deshalb würde man keinen PK dafür einsetzen. Wie Du an dem Problem "Tochterfirma" mit anderer Handhabung der Rechnungsnummer sehen kannst, ist ein PK eine sehr eingeschränkt nutzbare Implementierungsform für dieses Problem.
Wenn es eine einheitliche Software ist, die mit diesen beiden verschiedenen Anforderungen umgehen muss würde ich es so...