Zu der Fehlermeldung hier die Korrektur:
Code: Alles auswählen
CREATE OR ALTER PROCEDURE P_BSA_ARTNR_SUCHE (
id integer,
artnr varchar(40))
returns (
maskenkey varchar(40))
as
declare variable smaxmkey varchar(40);
declare variable stemprechts varchar(40);
declare variable nlang numeric(15,0);
declare variable iwhile1 numeric(15,0);
declare variable iwhile2 numeric(15,0);
declare variable iwhile2kopie numeric(15,0);
declare variable nstrminlenmkey numeric(15,0);
declare variable nstrmaxlenmkey numeric(15,0);
declare variable n1 numeric(15,0);
declare variable s1 varchar(40);
declare variable smaxmkey2 varchar(40);
declare variable temp_id integer;
declare variable bmand_id integer;
declare variable mkey varchar(40);
es mussten nur die Nummeric mit einem Wert > 0 vorbelegt werden.
Damit die Artikelnummer richtig hochgezählt wird müsste die Prozedur wie folgt geändert werden:
Code: Alles auswählen
BEGIN
/* USERVORGABE BERÜCKSICHTIGEN */
-- SELECT MAX(F_STRINGLENGTH(MASKENKEY))
-- Änderung 27.01.2009 - KTS
SELECT MAX(F_STRINGLENGTH(MASKENKEY))
FROM BSA
WHERE (MASKENKEY STARTING :ARTNR)
INTO :NLANG;
IF (NLANG IS NULL) THEN
BEGIN
-- MASKENKEY = ARTNR || F_PADLEFT('1','0',5); /* SO HAT NOCH KEINE NUMMER ANGEFANGEN, ALSO EINFACH 1 ANHÄNGEN */
-- Änderung 27.01.2009 - KTS
MASKENKEY = ARTNR || F_PADLEFT('1','0',0); /* SO HAT NOCH KEINE NUMMER ANGEFANGEN, ALSO EINFACH 1 ANHÄNGEN*/
SUSPEND;
EXIT;
END
ELSE
BEGIN
IF (NLANG > F_STRINGLENGTH(ARTNR)) THEN
BEGIN
/* wenn schon existiert und zahlen hintendran, dann einfach hochzählen */
SELECT MAX(MASKENKEY)
FROM BSA
-- WHERE (MASKENKEY STARTING WITH :ARTNR)
-- Änderung 27.01.2009 - KTS
WHERE MASKENKEY STARTING WITH :ARTNR AND F_STRINGLENGTH(MASKENKEY) = :NLANG
INTO :MKEY;
/* MKEY = F_RIGHT(:MKEY,(F_STRINGLENGTH(:MKEY) - 1 - F_SUBSTR('-',F_LRTRIM(:MKEY))));
MKEY = CAST(MKEY AS INTEGER) + 1;
MKEY = F_PADLEFT(:MKEY,'0',5);*/
-- Änderung 27.01.2009 - KTS- Zählung direkt nach Vorgabe Bsp: 111,112 (11 ist Vorgabe){
MKEY = F_RIGHT(:MKEY,F_STRINGLENGTH(:MKEY) - F_STRINGLENGTH(F_LRTRIM(:ARTNR)));
MKEY = CAST(MKEY AS INTEGER) + 1;
--}
MASKENKEY = :ARTNR || :MKEY;
SUSPEND;
EXIT;
END
Nach ersten Test´s funktioniert es auch ohne Probleme.
Verbesserungsvorschläge nehme ich gerne entgegen.
Gruß
KTS
AvERP-Exe: 4.2.1.6
Datenbank: AvERP2009-A.01
_________________________
Suchen heißt finden und je mehr man sucht um so mehr findet man.
