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