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. 
