tag:blogger.com,1999:blog-26801181.post6333491315969511507..comments2023-10-18T20:16:44.581+02:00Comments on Programación PL/SQL: Transacciones parciales en PLSQL para lidiar con tablas muy grandes o voluminosasJLPMhttp://www.blogger.com/profile/00891045835734721638noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-26801181.post-50404719199548540422019-04-17T16:58:57.568+02:002019-04-17T16:58:57.568+02:00Si, es correcto, el COMMIT se ejecuta en cada iter...Si, es correcto, el COMMIT se ejecuta en cada iteración y esa precisamente podría se la causa del error ORA-01555.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-66462884874159085912019-04-17T03:39:44.580+02:002019-04-17T03:39:44.580+02:00BEGIN
OPEN cur;
LOOP
FETCH cur BULK COLLECT INTO c...BEGIN<br />OPEN cur;<br />LOOP<br />FETCH cur BULK COLLECT INTO cur_rec LIMIT 500;<br />...<br />FORALL i IN 1 .. cur_rec.COUNT<br />UPDATE tmillon SET ... ;<br />-- cur_rec se usa en el UPDATE<br />...<br />COMMIT;<br />EXIT WHEN cur%NOTFOUND;<br />END LOOP;<br />CLOSE cur;<br /><br /><br />El commit se esta ejecutando por cada iteracion del bucle ?Gregory Riverohttps://www.blogger.com/profile/09715035736876964163noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-56233995148696634102010-01-13T18:58:58.272+01:002010-01-13T18:58:58.272+01:00Gerardo, tu solución me suena a algo más elaborado...Gerardo, tu solución me suena a algo más elaborado pero parecido a realizar un COMMIT cada X número de registros procesados. Ya he comentado que esto puede causar problemas.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-41493990525882490732010-01-13T16:54:35.047+01:002010-01-13T16:54:35.047+01:00Pepe,
Yo me he enfrentado a este problema, y lo q...Pepe,<br /><br />Yo me he enfrentado a este problema, y lo que hago es crear una funcion que me devuelve con pipelined los registros que debo de modificar, lo que hago es crear un procedimiento ese procedimiento recibe como parametro la cantidad de registros por bloque a procesar, en base a ello obtengo el numero de segmentos que puedo obtener e itero este valor, en cada iteracion mando llamar una funcion, la cual previamente cree que recibe el numero de segmentos y el numero de registros por bloque y me regresa pipelined estos datos, y asi con el retorno de la funcion hago el proceso que requiero y antes de regresar a la iteracion de segmentos ejecuto mi commit.<br /><br />No se que pienses de esta salida, me gustaria saber tus comentarios.<br /><br />SaludosAnonymoushttps://www.blogger.com/profile/07456405989873401608noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-8292295361836585642009-12-30T19:38:00.608+01:002009-12-30T19:38:00.608+01:00Astrid, dejar el trigger funcionando durante la re...Astrid, dejar el trigger funcionando durante la redefinición de la tabla crearía problemas de inconsistencia. Ese es el motivo por el que el paquete DBMS_REDEFINITION deshabilita los triggers.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-83805237456142988472009-12-30T19:33:48.905+01:002009-12-30T19:33:48.905+01:00Hola Pepelu...
No hemos encontrado la solución a ...Hola Pepelu...<br /><br />No hemos encontrado la solución a lo que necesitamos, por lo tanto, estabamos pensando en usar el redefinition para pasar de la tabla origen a la tabla temporal y sobre la tabla temporal crear un trigger BEFORE INSERT donde se valide si el registro insertado esta entre 1,2 y 3 si es así no lo inserte y sino que lo inserte... Pero al parecer el redefinition en oracle 9 deshabilita el trigger mientras se ejecuta el DBMS_REDEFINITION.START_REDEF_TABLE<br /><br />Sabes si se alguna manera se le puede indicar al redefinition que no deshabilite ese trigger? <br /><br />Gracias...Unknownhttps://www.blogger.com/profile/02492646790572396044noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-36558097659375142522009-12-21T21:24:37.447+01:002009-12-21T21:24:37.447+01:00OK, muchas gracias :'(OK, muchas gracias :'(Unknownhttps://www.blogger.com/profile/02492646790572396044noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-65823183150417565932009-12-21T21:18:41.228+01:002009-12-21T21:18:41.228+01:00Astrid, que yo sepa la funcionalidad del paquete D...Astrid, que yo sepa la funcionalidad del paquete DBMS_REDEFINITION no permite hacer lo que pides, siempre opera sobre la totalidad de la tabla.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-63294500193291041612009-12-21T21:13:04.106+01:002009-12-21T21:13:04.106+01:00Hola Pepelu, muchas gracias por tu pronta respuest...Hola Pepelu, muchas gracias por tu pronta respuesta, sin embargo, he buscado las utilidades del paquete pero en todas las explicaciones los ejemplos se hacen directamente con <b>todos</b> los registros de la tabla origen, sé que este paquete permite modificar datos de todos los registros o adicionar columnas sobre la tabla y algunas otras cosas más, pero lo que necesito saber es si este paquete permite hacer eso mismo sobre un porcentaje de los registros de la tabla... Digamos que necesito sacar el 90% de la información de esa tabla pero es demasiado grande para poder hacerlo en corto tiempo. Y ese paquete hace lo que necesito que haga pero excluyendo la información más vieja...<br />Gracias... :)Unknownhttps://www.blogger.com/profile/02492646790572396044noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-45675771680937765112009-12-21T21:02:31.501+01:002009-12-21T21:02:31.501+01:00Hola Astrid,
Es posible que esté artículo te ayud...Hola Astrid,<br /><br />Es posible que esté artículo te ayude a comprender la utilidad del paquete estándar Oracle DBMS_REDEFINITION:<br /><br />http://www.dba-oracle.com/t_dbms_redefinition.htmJLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-16409112011824377532009-12-21T20:50:32.316+01:002009-12-21T20:50:32.316+01:00Necesito pasar un porcentaje de información de una...Necesito pasar un porcentaje de información de una tabla con millones de registros usando el <b> DBMS_REDEFINITION </b>, es posible usar un <b> WHERE </b> dentro de este procedimiento para excluír algunos registros? Como se haría?Unknownhttps://www.blogger.com/profile/02492646790572396044noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-28537138362283562522009-09-15T22:39:05.079+02:002009-09-15T22:39:05.079+02:00En mi opinión transacciones parciales no solo tien...En mi opinión transacciones parciales no solo tienen los problemas mencionados en el articulo, sino que a nivel de negocio pueden dar cabida a información errada, supongase una conversión monetaria: la mitad esta en una moneda y la mitad en otra, pues otro usuario puede leer la información que el servidor da por fija (committed)XOXOnehttps://www.blogger.com/profile/17216546656323422525noreply@blogger.com