Operaciones ORACLE en Evento SQLPreview

Tengo desarrollada una aplicación en PowerBuiler que opera sobre ORACLE. ¿El problema radica en que se hacen operaciones de actualización a varias tablas desde el evento SQLPreview del DataWindow y en ciertas ocasiones efectúa la actualización a todas las tablas y en otras no. Existe algún parámetro en ORACLE que determine que tantas "operaciones" se pueden hacer antes de un COMMIT? ¿O PowerBuilder tiene limitantes de este tipo? Es de anotar que el inconveniente se presenta en las versiones 6 y 7 de PowerBuilder.

2 Respuestas

Respuesta
1
Efectivamente existe limitación. Esta limitación la tiene ORACLE, en su configuración tiene que tener un parámetro que le indica el número de transacciones que puede realizar a la vez, por ejemplo si puedes hacer 200 insert o 200 actualizaciones.
Para solucionar el problema tendrás que ponerte en contacto con el administrador de base de datos y que él te amplíe este número.
Otra posibilidad es que tu por código, controles el número de transacciones a realizar.
En cualquier caso no te se decir exactamente cuál es el parámetro.
Respuesta
1
Oracle como B.D. robusta permite realizar transacciones a través de begin tran y commit tran, dentro de esta transacción se pueden hacer muchas operaciones como inserts, updates o deletes, el problema es que si hay un rollback dentro de la transacción todo lo anterior se deshace, ¿cómo estas haciendo las actualizaciones?, debido a que si es a través de la función tuDw. Update() PowerBuilder solo puede actualizar una tabla contenida en tuDW, es decir que si creas un objeto "tuDW" y en este objeto tienes varias tablas debes actualizarlas de forma dinamica, a partir de codigo de PowerBuilder, existe un ejemplo de esto en PB, de como actualizar varias tablas contenidas en un objeto DW, lo mejor es crear un objeto invisible "tuDW" para cada tabla que quieras trabajar y en una función hacer un tuDW. update() lo cuál es más sencillo por que PB se encarga de manejar las transacciones.
Básicamente lo que estoy haciendo es que en determinado DW hago el Update de una sola tabla, pero esta actualización se debe reflejar en otras tablas, ajenas a la ventana que contiene el DW en cuestión. Para actualizar las tablas ajenas al DW utilizo el evento SQLPreview del DW, el cual se "dispara" antes de hacer el Update del mismo. El problema es que a veces me actualiza la tablas ajenas al DW y a veces no; y la verdad el código del SQLPreview no tiene ningún tipo condición, es decir, que siempre se debería ejecutar.
Debes fijarte si tienes triggers o llaves foráneas entre estas tablas, pregunta:¿Cómo haces la actualización de esas otras tablas? Podes hacer procedimientos almacenados que se disparen retornando algún código que te indique si pudo o no hacer las actualizaciones, es más seguro, te recomiendo no hacer estos llamados dentro del SQLPreview del DW, es decir no utilizar actualizaciones de otras DW o tablas, ya que el DW es un objeto creado a través de un select gráfico de una tabla manejado a través de cursores de PB, y puede que mientras hace el Preview de dw todavía no halla hecho el update físico en la B.D., debido a que este evento se dispara antes de que el estamento SQL sea manejado por el DBMS.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas