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