Oracle - Problema en el Paso de Parámetros a Función

 
Vista:

Problema en el Paso de Parámetros a Función

Publicado por Oasis (3 intervenciones) el 03/01/2006 09:12:35
Buenos días.

Allá va mi problema: Tengo un paquete en el que un procedimiento hace referencia a una función, a esta función se le pasan cuatro parámetros, estos parámetros son utilizados en clausulas 'where' de una query que suma los valores de un campo, suma que es el parámetro que devuelve la función, pero resulta que dos de estos parámetros no los utiliza correctamente, el valor que devuelve la función indica que las dos clausulas where en las que están incluidos estos parámetros no son tenidas en cuenta o que suma todos los valores de estos parámetros.

Ya le he dado muchas vueltas e incluso he conseguido que devuelva los valores adecuados de forma chapucera, creando una query dentro de unos "IF" para cada posible valor conocido de este parámetro.

Agradezco cualquier idea para solucionar este contratiempo.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema en el Paso de Parámetros a Función

Publicado por JSL (186 intervenciones) el 03/01/2006 19:35:54
Si puedes pon la funcion ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema en el Paso de Parámetros a Función

Publicado por Oasis (3 intervenciones) el 04/01/2006 08:45:00
Ahora mismo no la tengo aquí, pero es algo parecido a esto:

FUNCTION Nombre (Parametro1 IN TABLA1.CAMPOA%TYPE,
Parametro2 IN TABLA1.CAMPOB%TYPE,
Parametro3 IN TABLA1.CAMPOC%TYPE,
Parametro4 IN NUMBER) RETURN NUMBER AS
v_valor NUMBER;

BEGIN
SELECT SUM(TABLA1.CAMPOE)
FROM TABLA1
WHERE TABLA1.CAMPOA= Parametro1
AND TABLA1.CAMPOB=Parametro2
AND TABLA1.CAMPOC=Parametro3
AND TABLA1.CAMPOD=Parametro4
GROUP BY CAMPOE;
RETURN(v_valor);
END Nombre;

Los Parametros 1 y 4 los coge correctamente, pero el 2 y el 3 es como si no existieran las clausulas, me devuelve la suma de todos los registros, independientemente del valor de los campos B y C, sin embargo, cuando simulo la query, poniendole valores manualmente, si que funciona.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema en el Paso de Parámetros a Función

Publicado por JSL (186 intervenciones) el 04/01/2006 17:49:27
¿¿¿ De que tipo son tus valores , Cuando invocas a la FUNCION ???

-----------------------------

create or replace function f1(param varchar2) return number is
val number;
begin
select count(1) into val from dual where '01'=param;
return val;
end;
/

Como puedes ver, el parametro de entrada a la funcion es varchar2 ...

-------------------------------

-- En este 1er llamado mando '01' como cadena ...

11:10:47 SQL> select f1('01') from dual;

F1('01')
----------
1

-- En este 2o llamado mando 1 como numero

11:10:51 SQL> select f1(1) from dual;

F1(1)
----------
0

11:10:56 SQL>

Como puedes ver, revisa como estas mandando los valores a la funcion ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema en el Paso de Parámetros a Función

Publicado por Oasis (3 intervenciones) el 05/01/2006 08:32:12
Antes de nada gracias por responder.

Te pongo comentado el tipo de valor que debe recibir.

FUNCTION Nombre (Parametro1 IN TABLA1.CAMPOA%TYPE, --VARCHAR2(1)
Parametro2 IN TABLA1.CAMPOB%TYPE, --VARCHAR2(30)
Parametro3 IN TABLA1.CAMPOC%TYPE, --VARCHAR2(30)
Parametro4 IN NUMBER) RETURN NUMBER AS
v_valor NUMBER;

BEGIN
SELECT SUM(TABLA1.CAMPOE)
FROM TABLA1
WHERE TABLA1.CAMPOA= Parametro1
AND TABLA1.CAMPOB=Parametro2
AND TABLA1.CAMPOC=Parametro3
AND TABLA1.CAMPOD=Parametro4
GROUP BY CAMPOE;

RETURN(v_valor);
END Nombre;

Y a continuación te pongo ejemplos de las posibles llamadas que le hago a la función, es más, de momento se realizan exclusivamente cuatro posibles llamadas con los valores de los parámetros 2 y 3, ya que los parámetros 1 y 4 sí que los recibe. (Ya comenté en mi primer mensaje que he conseguido hacerlo repitiendo la select cuatro veces comprobando los valores en el IF, pero es muy chapucero, ya que si los posibles valores cambiasen, tocaría cambiar la función)

Nombre(Variable1,'ValorA1','ValorB1',Constante1)
Nombre(Variable1,'ValorA1','ValorB2',Constante1)
Nombre(Variable1,'ValorA2','ValorB1',Constante1)
Nombre(Variable1,'ValorA2','ValorB2',Constante1)

Los posibles valores de Variable1 son '1','2','3' y '4', en formato texto y el valor de la constante es de tipo number, y su valor viene pasado por la llamada al procedimiento, ya que la función es llamada desde un procedimiento.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema en el Paso de Parámetros a Función

Publicado por JSL (186 intervenciones) el 05/01/2006 23:00:18
Haz un tipo DEBUG ...

create or replace function f(pa1 number) return number is
x number;
begin
select count(1) into x from dual;
dbms_output.put_line(x);
return x;
end;

set serveroutput on

declare r number;
begin r := f(2);
end;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar