SGGR#82865 Automatische nummering van objecten niet volmaakt

svn path=/Database/trunk/; revision=64142
This commit is contained in:
Jos Groot Lipman
2024-04-03 10:16:43 +00:00
parent 7423f8de7d
commit 9d5b3ec37b

View File

@@ -54,9 +54,8 @@ CREATE OR REPLACE PACKAGE BODY ins AS
END;
-- Determine max+1 volgnr for an object (deel or onderdeel) op basis van het format prefix+volgnummer
-- De laagste is 001 maar vervolgens wordt het gevonde aantal cijfers aangehouden, dus prefix0001+1 = prefix0002
-- De laagste is 001 maar vervolgens wordt het gevonden aantal cijfers aangehouden, dus prefix0001+1 = prefix0002
-- Zo nodig wordt er een cijfer bij gedaan. De prefix wordt case-insensitive beschouwd.
-- Alleen actuele objecten worden beschouwd, dus dit is in zekere zin een beetje tijdsafhankelijk
FUNCTION nextdescription( pprefix IN VARCHAR2
, pparentkey IN NUMBER
, pseparator IN VARCHAR2 DEFAULT 'default') RETURN VARCHAR2 IS
@@ -76,28 +75,28 @@ CREATE OR REPLACE PACKAGE BODY ins AS
IF pparentkey IS NULL
THEN
SELECT CASE
WHEN COALESCE(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix)))) + 1, 1) < 1000
THEN COALESCE(LPAD(TO_CHAR(MAX(TO_NUMBER( SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix)))) + 1), MAX(LENGTH(ins_deel_upper) - LENGTH(lprefix)), '0'), '001')
ELSE TO_CHAR(MAX(TO_NUMBER(SUBSTR( ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix)))) + 1)
WHEN COALESCE(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1))) + 1, 1) < 1000
THEN COALESCE(LPAD(TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1))) + 1), MAX(LENGTH(ins_deel_upper) - LENGTH(lprefix)), '0'), '001')
ELSE TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1))) + 1)
END nextvolgnr
INTO nextvolgnr
FROM ins_deel
WHERE ins_deel_upper LIKE UPPER(lprefix)||'%'
AND fac.safe_to_integer(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix))) IS NOT NULL
WHERE ins_deel_upper LIKE UPPER(lprefix) || '%'
AND fac.safe_to_integer(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1)) IS NOT NULL
AND LTRIM(SUBSTR (ins_deel_upper, LENGTH (lprefix) + 1), '0') = TO_CHAR(fac.safe_to_integer ((SUBSTR (ins_deel_upper, LENGTH (lprefix) + 1))))
AND ins_deel_parent_key IS NULL
AND ins_deel_verwijder IS NULL;
ELSIF pparentkey IS NOT NULL
THEN
SELECT CASE
WHEN COALESCE(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix)))) + 1, 1) < 1000
THEN COALESCE(LPAD(TO_CHAR(MAX(TO_NUMBER( SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix)))) + 1), MAX(LENGTH(ins_deel_upper) - LENGTH(lprefix)), '0'), '001')
ELSE TO_CHAR(MAX(TO_NUMBER(SUBSTR( ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix)))) + 1)
WHEN COALESCE(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1))) + 1, 1) < 1000
THEN COALESCE(LPAD(TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1))) + 1), MAX(LENGTH(ins_deel_upper) - LENGTH(lprefix)), '0'), '001')
ELSE TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1))) + 1)
END nextvolgnr
INTO nextvolgnr
FROM ins_deel
WHERE ins_deel_upper LIKE UPPER(lprefix) || '%'
AND fac.safe_to_integer(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1, LENGTH(ins_deel_upper) - LENGTH(lprefix))) IS NOT NULL
AND fac.safe_to_integer(SUBSTR(ins_deel_upper, LENGTH(lprefix) + 1)) IS NOT NULL
AND ins_deel_parent_key = pparentkey
AND ins_deel_verwijder IS NULL;
END IF;