Hello Alexander,
   I've removed almost everything in the procedure.

    To make the procedure go, I've removed almost everything; as far as you can see in 
the procedure following, the procedure is like a dummy one now and doesn't do anything 
at all - only returns a 1. 
    
CREATE FUNCTION ISEMPINUNITDIVISION (
UNITDIVISIONID FIXED(9,0),
ROLETYPEID FIXED(9,0),
EMPCOMPANYID FIXED(9,0),
EMPHUMANRESOURCEID FIXED(9,0),
EMPDSTARTCHR TIMESTAMP,
F_UD_LTD CHAR(1))
RETURNS NUMBER AS
VAR RES INT; N_PATH VARCHAR(4000); MSG VARCHAR(1000); L_EMPDSTARTCHR TIMESTAMP;
BEGIN
IF UNITDIVISIONID IS NULL OR EMPCOMPANYID IS NULL OR EMPHUMANRESOURCEID IS NULL OR
EMPDSTARTCHR IS NULL THEN
RETURN 0; 

SET L_EMPDSTARTCHR = EMPDSTARTCHR;

TRY 
RETURN 1;
CATCH
IF $RC <> 100 THEN
STOP($RC,$ERRMSG)
ELSE RETURN 0;
END;
//

If only I put a select statement without using any parameters, the procedure crash 
(look the following example) .

CREATE FUNCTION ISEMPINUNITDIVISION (
UNITDIVISIONID FIXED(9,0),
ROLETYPEID FIXED(9,0),
EMPCOMPANYID FIXED(9,0),
EMPHUMANRESOURCEID FIXED(9,0),
EMPDSTARTCHR TIMESTAMP,
F_UD_LTD CHAR(1))
RETURNS NUMBER AS
VAR RES INT; N_PATH VARCHAR(4000); MSG VARCHAR(1000); L_EMPDSTARTCHR TIMESTAMP;
BEGIN
IF UNITDIVISIONID IS NULL OR EMPCOMPANYID IS NULL OR EMPHUMANRESOURCEID IS NULL OR
EMPDSTARTCHR IS NULL THEN
RETURN 0; 

SET L_EMPDSTARTCHR = EMPDSTARTCHR;

TRY 
SELECT 1 INTO :RES
FROM PSF.COMPANY_HR_ROLE A
INNER JOIN PSF.UNIT_DIVISION B
ON A.E_U_DIV_K_UNIT_DIVISION = B.K_UNIT_DIVISION
WHERE
ROWNO<=1;
RETURN 1;
CATCH
IF $RC <> 100 THEN
STOP($RC,$ERRMSG)
ELSE RETURN 0;
END;
//

The error appears in Sql Studio only once after function re-creation (every following 
time everything goes fine); however, in Java it repeatedly occures. 
It seems that something happens at session' starting.

If you need, I'll send you vTrace file.

Thanks,
   Matteo

  ----- Original Message ----- 
  From: Schroeder, Alexander 
  To: 'Matteo Gattoni' 
  Sent: Tuesday, August 03, 2004 4:35 PM
  Subject: RE: Invalid Exponent (3)


  Hello Matteo

  sorry, I misunderstood slightly your previous mail, so you get the -3019 both with 
execution in Java as also
  with SQL Studio on the SELECT statement with the function.

  Anyway, this does also not explain the -3019 to me. Is it possibly for you to strip 
further down by removing
  statements from the function/changing the SELECT what actually starts causing that 
error (as I fear that you
  did again run into some trouble with the current state DB function implementation)?

  Sorry for any inconvenience caused

  Alexander Schr�der
  SAP DB, SAP Labs Berlin 
    -----Original Message-----
    From: Matteo Gattoni [mailto:[EMAIL PROTECTED]
    Sent: Tuesday, August 03, 2004 4:09 PM
    To: Schroeder, Alexander
    Subject: Re: Invalid Exponent (3)


    Hello Alexander,

        This is the application server's configuration 
        
        <local-tx-datasource>
        <jndi-name>maxdb</jndi-name>
        <connection-url>jdbc:sapdb://XXX/XXX?sqlmode=ORACLE</connection-url>
        <driver-class>com.sap.dbtech.jdbc.DriverSapDB</driver-class>
        <user-name>XXX</user-name>
        <password>XXX</password>
        </local-tx-datasource>

        We are using PreparedStatement in our Java code and the mode is ORACLE both in 
Java and in Sql studio.

    Thanks,
       Matteo


    ----- Original Message ----- 
    From: "Schroeder, Alexander" <[EMAIL PROTECTED]>
    To: "'Matteo Gattoni'" <[EMAIL PROTECTED]>
    Sent: Tuesday, August 03, 2004 3:48 PM
    Subject: RE: Invalid Exponent (3)


    Hello Matteo,

    can you try using a 'PreparedStatement' in Java (even if there are no parameters)? 
    Are you using the same SQL Mode in SQL Studio as in Java ? 

    Regards

    Alexander Schr�der
    SAP DB, SAP Labs Berlin 

    > -----Original Message-----
    > From: Matteo Gattoni [mailto:[EMAIL PROTECTED]
    > Sent: Tuesday, August 03, 2004 3:41 PM
    > To: [EMAIL PROTECTED]
    > Subject: Invalid Exponent (3)
    > 
    > 
    > I've changed the function in the following way
    > 
    > CREATE FUNCTION ISEMPINUNITDIVISION (
    >     UNITDIVISIONID FIXED(9,0),
    >     ROLETYPEID FIXED(9,0),
    >     EMPCOMPANYID FIXED(9,0),
    >     EMPHUMANRESOURCEID FIXED(9,0),
    >     EMPDSTARTCHR TIMESTAMP,
    >     F_UD_LTD CHAR(1))
    > RETURNS NUMBER AS
    >     VAR RES INT; N_PATH VARCHAR(4000); MSG VARCHAR(1000); 
    > L_EMPDSTARTCHR TIMESTAMP;
    > BEGIN
    >     IF UNITDIVISIONID IS NULL OR EMPCOMPANYID IS NULL OR 
    > EMPHUMANRESOURCEID IS NULL OR
    >             EMPDSTARTCHR IS NULL THEN
    >         RETURN 0;        
    >         
    >     SET L_EMPDSTARTCHR = EMPDSTARTCHR;
    >     
    >     TRY              
    >         IF F_UD_LTD IS NOT NULL AND F_UD_LTD='T' THEN
    >             SELECT 1 INTO :RES
    >               FROM
    >                     PSF.UNIT_DIVISION B
    >                    ,PSF.COMPANY_HR_ROLE A
    >              WHERE
    >                    
    > DATE(VALUE(DATE(B.D_END),ADDDATE(TIMESTAMP,1)))>DATE(TIMESTAMP)
    >                AND DATE(B.D_START)<=DATE(TIMESTAMP)
    >                AND B.K_UNIT_DIVISION=A.E_U_DIV_K_UNIT_DIVISION
    >                AND 
    > DATE(VALUE(DATE(A.D_END),ADDDATE(TIMESTAMP,1)))>DATE(TIMESTAMP)
    >                AND DATE(A.D_START)<=DATE(TIMESTAMP)
    >                AND 
    > A.E_ROLE_TYP_K_ROLE_TYPE=VALUE(:ROLETYPEID,A.E_ROLE_TYP_K_ROLE_TYPE)
    >                AND A.E_U_DIV_K_UNIT_DIVISION=:UNITDIVISIONID
    >                AND A.E_COMP_HR_K_COMPANY=:EMPCOMPANYID
    >                AND A.E_COMP_HR_K_HUMAN_RESOURCE=:EMPHUMANRESOURCEID
    >                AND DATE(A.E_COMP_HR_D_START)=DATE(:L_EMPDSTARTCHR)
    >                AND ROWNO<=1
    >         ELSE
    >             BEGIN
    >                 SELECT 1 INTO :RES
    >                   FROM  PSF.COMPANY_HR_ROLE A
    >                         INNER JOIN PSF.UNIT_DIVISION B
    >                         ON A.E_U_DIV_K_UNIT_DIVISION = 
    > B.K_UNIT_DIVISION
    >                  WHERE
    >                        
    > DATE(VALUE(DATE(B.D_END),ADDDATE(TIMESTAMP,1)))>DATE(TIMESTAMP)
    >                    AND DATE(B.D_START)<=DATE(TIMESTAMP)
    >                    AND 
    > UNIT_DIVISION_ANCESTOR(B.K_UNIT_DIVISION) = :UNITDIVISIONID
    >                    AND 
    > DATE(VALUE(DATE(A.D_END),ADDDATE(TIMESTAMP,1)))>DATE(TIMESTAMP)
    >                    AND DATE(A.D_START)<=DATE(TIMESTAMP)
    >                    AND 
    > A.E_ROLE_TYP_K_ROLE_TYPE=VALUE(:ROLETYPEID,A.E_ROLE_TYP_K_ROLE_TYPE)
    >                    AND A.E_COMP_HR_K_COMPANY=:EMPCOMPANYID
    >                    AND 
    > A.E_COMP_HR_K_HUMAN_RESOURCE=:EMPHUMANRESOURCEID
    >                    AND DATE(A.E_COMP_HR_D_START)=DATE(:L_EMPDSTARTCHR)
    >                    AND ROWNO<=1;
    >             END;
    >         RETURN 1;
    >     CATCH
    >         IF $RC <> 100 THEN
    >            STOP($RC,$ERRMSG)
    >         ELSE RETURN 0;
    > END;
    > 
    > where 
    > 
    > CREATE FUNCTION UNIT_DIVISION(C NUMBER) RETURNS NUMBER AS
    >   VAR FATHER FIXED(9,0); CHILD FIXED(9,0);
    > TRY
    > 
    >   SET CHILD = C;
    > 
    >   WHILE 1 = 1 DO
    >   BEGIN
    >     SELECT E_U_DIV_K_UNIT_DIVISION
    >       INTO :FATHER
    >       FROM PSF.UNIT_DIVISION
    >      WHERE
    >            K_UNIT_DIVISION = :CHILD
    >        AND D_END IS NULL;
    > 
    >     IF FATHER IS NULL THEN
    >       RETURN CHILD;
    > 
    >     SET CHILD = FATHER;
    >   END;
    > 
    >   RETURN FATHER;
    > 
    > CATCH
    >   IF $RC <> 100 THEN STOP($RC, $ERRMSG)
    >   ELSE RETURN CHILD;
    > //
    > 
    > Recreating all the procedure at once, the first time a submit 
    > the statement
    > 
    > SELECT
    > 1
    > FROM
    > dual
    > WHERE
    > 1=isEmpInAggregation(to_number('200004'), 
    > NULL,to_number('1'), 
    > to_number('200002'),to_date('21-05-2004','dd/mm/yyyy'))
    > 
    > I receive the error 'Numeric value out of range;-3019 Invalid 
    > exponent.'
    > From that moment on, everything goes ok.....but using Java I 
    > receive the same error
    > 'exception [-3019]: Invalid exponent'.
    > 
    > Why a SQL statement goes with SQL Studio and doesn't with Java?
    > Why the first time the statement goes wrong and then everything is ok?
    > What's my mistake?
    > 
    > If you need trace or everything else, just ask me.
    > 
    > Thanks,
    >    Matteo
    > 
    > 

Reply via email to