may
29
2012

Resolver error ora-01008 not all variables bound | frm-41380

Descarga el contenido del Artículo en PDF pdf Resolver error ora 01008 not all variables bound | frm 41380

Error ORA-01008 FRM-41380

En este artículo explicamos como resolver los errores “ora-01008 not all variables bound” y “frm-41380 Cannot set the blocks query data source”. Para resolver este problema vamos a modificar la cláusula From de la pantalla en modo ejecución.

Modificar la cláusula From en modo de ejecución

Cuando necesitamos recuperar valores que vengan de un agrupamiento de otras tablas sugerimos hacer una cláusula From, el problema que nos podemos encontrar es que cuando necesitamos que esa subselect realice un filtro con variables de la aplicación nos aparece el error “ora-01008 not all variables bound” ya que durante la consulta no es capaz de darle un valor a esas variables.

java%2Boracle Resolver error ora 01008 not all variables bound | frm 41380

Para poder solucionar esto deberemos modificar la subselect de forma manual y en tiempo de ejecución. Por otro lado en las propiedades del bloque deberemos poner lo siguiente:

Consultar Tipo de Origen de Datos: Consulta de cláusula FROM.

Nombre de Origen de Datos de Consulta: (Aunque luego se sustituya el valor en ejecución es necesario introducir algún contenido para que no nos de error).

Alias: El nombre de la tabla de la que consultamos.

Para modificar la consulta en tiempo de ejecución tendremos que utilizar el trigger Pre-query, donde escribiremos la Subselect necesaria y modificaremos la propiedad del bloque (QUERY_DATA_SOURCE_NAME ) que corresponde a “Nombre de Origen de Datos de Consulta de Datos” de la siguiente manera:

1
2
3
4
5
6
7
8
9
DECLARE
	cadena_from VARCHAR(2000);
BEGIN
cadena_from := '(SELECT NOMBRE,APELLIDO,DIRECCION, SUM(PTIMPORTE) PTIMPORTE
             FROM PEDIDOS WHERE CDHABIL = '''|| :VARB_COMN.HABIL || ''' AND
             TO_DATE(FENOMDES,''J'') >= TO_DATE('''|| :B0.MD ||''',''MM/YYYY'')
             AND TO_DATE(FENOMDES,''J'')';
 
set_block_property('B1',QUERY_DATA_SOURCE_NAME,cadena_from);

Si necesitáis realizar dos veces la consulta es necesario limpiar el bloque, se puede hacer de dos formas dependiendo del problema que os surja.

Uno de ellos es limpiar el bloque antes de realizar el execute query:
go_block (‘bloque_de_datos’);
clear_block (no_validate);

Y otro es si el problema que os da es que os monta un where después de la consulta, podéis limpiarlo así:
set_Block_Property(‘B1′,DEFAULT_WHERE,’ ‘);

De estas dos maneras podemos resolver tanto el error “ora-01008 not all variables bound” como el error “frm-41380 Cannot set the blocks query data source”.

ORACLE FORMS

Artículos relacionados

Related Posts

Acerca del Autor:

2 Comments + Add Comment

  • Gracias por la explicación, sin embargo no entiendo algunas cosas: El código que muestran me imagino va en el pre-query verdad? y en query_data_source_name escribimos: cadena_from??
    En el alias que nombre de tabla coloco si de hecho en mi consulta cruzo varias tablas??..

    Gracias.

  • Hola,
    He añadido una linea al código, que creo que se tuvo que quedar en el olvido…

    Respecto a tu pregunta, el código va en el pre-query del bloque en el que necesitas usar una clausula from, y si, en el query_data_sorce_name tendremos que poner lo que contienen cadena_from de la siguiente forma (se pone también en el pre_query después de formar la cadena_from):

    set_block_property(‘B1′,QUERY_DATA_SOURCE_NAME,cadena_from);

    Para el alias puedes poner el nombre de una de las tablas he hecho este ejemplo para la cadena_from, en el se obtiene el campo CDTIPOP de otra tabla.

    SELECT DISTINCT . HRETAPRE.CDSECCIO, HRETAPRE.CDORGAN,

    HRETAPRE.CDSERVI, HRETAPRE.CDPROG,

    HRETAPRE.CDCLASEC,HRETCOAP.CDTIPOP

    FROM HRETAPRE , HRETCOAP

    WHERE HRETAPRE.CDHABIL = ‘DEM’

    AND HRETAPRE.CDCLASNM = ’02′

    AND TO_DATE(HRETAPRE.FENOMDES,’J') >= TO_DATE(’01/2010′,’MM/YYYY’)

    AND TO_DATE(HRETAPRE.FENOMDES,’J') < = TO_DATE('12/2010','MM/YYYY')

    AND HRETAPRE.CDHABIL = HRETCOAP.CDHABIL

    AND HRETAPRE.CDCLASNM = HRETCOAP.CDCLASNM

    and HRETAPRE.CDSECCIO = HRETCOAP.CDSECCIO

    and HRETAPRE.CDSERVI = HRETCOAP.CDSERVI

    and HRETAPRE.CDORGAN = HRETCOAP.CDORGAN

    and HRETAPRE.CDPROG = HRETCOAP.CDPROG

    and HRETAPRE.CDCLASEC = HRETCOAP.CDCLASEC

    El alias que hemos puesto en el bloque es HRETAPRE, y se tomará para todos los campos que pertenecen al bloque. Una vez que se realiza la consulta nos quedará así:

    SELECT HRETAPRE.CDSECCIO, HRETAPRE.CDSERVI, HRETAPRE.CDORGAN, HRETAPRE.CDPROG, HRETAPRE.CDCLASEC, HRETAPRE.CDTIPOP FROM (SELECT DISTINCT HRETAPRE.CDSECCIO, HRETAPRE.CDORGAN,

    HRETAPRE.CDSERVI, HRETAPRE.CDPROG,

    HRETAPRE.CDCLASEC,HRETCOAP.CDTIPOP

    FROM HRETAPRE , HRETCOAP

    WHERE HRETAPRE.CDHABIL = 'DEM'

    AND HRETAPRE.CDCLASNM = '02'

    AND TO_DATE(HRETAPRE.FENOMDES,'J') >= TO_DATE(’01/2010′,’MM/YYYY’)

    AND TO_DATE(HRETAPRE.FENOMDES,’J') <= TO_DATE(’12/2010′,’MM/YYYY’)

    AND HRETAPRE.CDHABIL = HRETCOAP.CDHABIL

    AND HRETAPRE.CDCLASNM = HRETCOAP.CDCLASNM

    and HRETAPRE.CDSECCIO = HRETCOAP.CDSECCIO

    and HRETAPRE.CDSERVI = HRETCOAP.CDSERVI

    and HRETAPRE.CDORGAN = HRETCOAP.CDORGAN

    and HRETAPRE.CDPROG = HRETCOAP.CDPROG

    and HRETAPRE.CDCLASEC = HRETCOAP.CDCLASEC) HRETAPRE

    El alias es HRETAPRE y CDTIPOP aunque es de otra tabla lo recogemos así “HRETAPRE.CDTIPOP” con el alias que le hemos puesto al bloque, es decir, puedes hacer la calusula from con todas las tablas que quieras pero para el alias debe ser solo una de ellas para todos los campos del bloque.

Leave a comment


6 − tres =

Recientes

  • admin: Hola, He añadido una linea al código, que creo que se tuvo que quedar en el olvido… Respecto a tu...
  • Bernardo: Gracias por la explicación, sin embargo no entiendo algunas cosas: El código que muestran me imagino va en...
  • admin: Ok, prueba. No obstante, si no lo consigues muestrame o envíame el código y te echo una mano. Suerte!
  • Anselmo: Gracias por la respuesta, hoy voy a intentar modificar el código. De hecho tengo una lista con muchos links,...
  • admin: Hola, Lo que quieres hacer no parece complicado, prueba esto: Modifica la función initialize para que le...