SGGR#82865 Automatische nummering van objecten niet volmaakt
svn path=/Database/trunk/; revision=64142
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user