MaxDB 7.6.00.12

Hello again,

Here is a strange behaviour of MaxDB when calling a DBPROC from an another DBPROC with calculations into parameters.
Eg :

/********************************/
MyVar INTEGER;

MyVar=128;
Call MyProc(:MyVar+1,:MySecVar);
/********************************/

The workaround is easy to guess but we lost a lot of time looking for our mistake...


Kind Regards
Xavier



Here is an example. Our goal was to avoid recursivity in using the left/right bound method.


/* creates the result test table */
CREATE TABLE "DEV"."AAA"
(
  "ID"               Integer    NOT NULL    DEFAULT SERIAL (1),
  "TEXTE"               Varchar (255) ASCII,
  PRIMARY KEY ("ID")
)

/* creates the called DBPROC */
CREATE DBPROC AFFAIRE_COPIE_TOUVR4 (
IN LIGNE_BG INTEGER,  OUT LBD FIXED(10)) AS
VAR
  RC INTEGER;
  TMP FIXED(20,0);
  BG INTEGER;
  BD INTEGER;
  POSIT INTEGER;
  IDTLIGNE INTEGER;
TRY

RC = 0;
LBD = 0;
POSIT = LIGNE_BG;
/*calcul de ligne_BG et ligne BD */
BG = POSIT;
BD = POSIT+1;

INSERT INTO DEV.AAA (TEXTE) VALUES ('dans TOUVR 1 LIGNE_BG='&CHR(:LIGNE_BG)&' BG ='&CHR(:BG)&' et BD ='&CHR(:BD));


 LBD = BD;

INSERT INTO DEV.AAA (TEXTE) VALUES ('dans TOUVR 2 BG ='&CHR(:BG)&' et BD ='&CHR(:BD));


CATCH
RC = $RC;
IF RC <> 0 THEN STOP (RC, 'Unexpected error');


/* Creates the calling DBPROC */
CREATE DBPROC AFFAIRE_COPIE_TOUVR2TEST (IN LIGNE_BG INTEGER) AS
VAR
  RC INTEGER;
  BG INTEGER;
  BD INTEGER;
  POSIT INTEGER;
  I INTEGER;

TRY

POSIT = LIGNE_BG;
/*calcul de ligne_BG et ligne BD */
BG = POSIT;
BD = POSIT+1;
I = 0;

TRY

WHILE I < 8 DO
BEGIN

 /*calcul de ligne_BG et ligne BD */
 SET BG = POSIT;
SET BD = BG+1; INSERT INTO DEV.AAA (TEXTE) VALUES ('BG ='&CHR(:BG)&' et BG+1 ='&CHR(:BG+1)&' et BD ='&CHR(:BD));

 CALL DEV.AFFAIRE_COPIE_TOUVR4 (:BG+1, :BD);

 SET POSIT = BD;

 SET BD = BD+1;

 I = I + 1 ;
END;
CATCH IF $RC <> 100 THEN STOP ($RC, 'Impossible d''enregistrer l''élément [AFFAIRE_COPIETOUVR2]');

CATCH
RC = $RC;
IF RC <> 0 THEN STOP (RC, 'Unexpected error');



Usage from SQLStudio :

CALL AFFAIRE_COPIE_TOUVR2TEST(126)

Results into AAA show that everything works fine. BG and BD values are increased as they should.


Now try :

CALL AFFAIRE_COPIE_TOUVR2TEST(127)

BG and BD are increased by a 10 step when their values = 129. Strange.


Workaround :

When moving the :BG+1 calculation outside the CALL DEV.AFFAIRE_COPIE_TOUVR4 (:BG+1, :BD) statement, everything works fine.



Regards.




--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to