Parametro en Query del Reports

Cuando trabajo en Reports, armo mi query de manera global, es decir sin el manejo de parámetros, y luego recién que lo he probado bien... Le agrego tantos parámetros como necesito... Adicionalmente también trabajo con un parámetro al que le he denominado p_where, el cual lo conmcateno al final de cada query. Por ej: select * from empleados where nombre=:p_nombre &p_where ... Y en este "p_where" le mando desde el forms, una cadena de where con diferentes filtros, según necesidad del usuario. Esto me ayuda enormemente para no estar enlazando un parámetro con un campo específico de mi query.
Mi problema surge cuando tengo que hacer un query con group by... Desde el Reports funciona pero desde el Forms no!

1 respuesta

Respuesta
1
Ok
Desde la version de sql/plus que tiene reports se puede pero desde la de forms no
Eso es un problema muy conocido
Pero para todo hay uja solución
Te mando un ejemplo de un procedure o function que corre desde una forma o desde la base de datos y
Se basa en un cursor dinámico para poder jugar con los select como lo haces desde reports!
Allí te va:
---------------
CREATE OR REPLACE FUNCTION SIS_MEMBRETE (P_CODIGO_EMPRESA NUMBER,P_FIELDS VARCHAR2) RETURN VARCHAR2 IS
V_MEMBRETE VARCHAR2(512);
V_PAIS VARCHAR2(128) := 'SIS_PKG_GENERICS.GET_NAME_CONTRY(PAIS_ID)';
V_ESTADO VARCHAR2(128) := '''ESTADO ''||SIS_PKG_GENERICS.GET_NAME_STATE(PAIS_ID, ESTADO_ID)';
V_MUNICIPIO VARCHAR2(128) := 'SIS_PKG_GENERICS.GET_NAME_MUNICIPIO(PAIS_ID,ESTADO_ID,MUNICIPIO_ID)';
V_CIUDAD VARCHAR2(128) := 'SIS_PKG_GENERICS.GET_NAME_CITY(PAIS_ID,ESTADO_ID,MUNICIPIO_ID,CIUDAD_ID)';
V_NOMBRE_EMPRESA VARCHAR2(128) := 'SE.NOMBRE_EMPRESA';
V_ALL_FIELDS VARCHAR2(1000);
V_STATEMENT VARCHAR2(1000);
--
TYPE CURSORTYPE IS REF CURSOR;
C1 CURSORTYPE;
BEGIN
/*
FIELDS:
P = PAIS
E = ESTADO
M = MUNICIPIO
C = CIUDAD
N = NOMBRE DE EMPRESA
*/
FOR I IN 1..LENGTH(P_FIELDS) LOOP
SELECT V_ALL_FIELDS||DECODE(V_ALL_FIELDS,NULL,NULL,'||CHR(10)||')||DECODE(SUBSTR(P_FIELDS,I,1),'P',V_PAIS,'C',V_CIUDAD,'E',V_ESTADO,'N',V_NOMBRE_EMPRESA,'M',V_MUNICIPIO,NULL)
INTO V_ALL_FIELDS
FROM DUAL;
END LOOP;
V_STATEMENT := 'SELECT '||V_ALL_FIELDS||' FROM SIS_EMPRESAS SE,SIS_DIRECCIONES SD WHERE SE.CODIGO_EMPRESA = '||P_CODIGO_EMPRESA||' AND SD.CODIGO_EMPRESA = SE.CODIGO_EMPRESA';
OPEN C1 FOR V_STATEMENT;
FETCH C1 INTO V_MEMBRETE;
CLOSE C1;
--
RETURN UPPER(V_MEMBRETE);
--
END SIS_MEMBRETE;
/
Suerte y recuerda valorar las preguntas una vez finalizadas!
BYE
Nuevamente
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas