Error en Cursor, Update, Commit
Publicado por Eduardo C. (75 intervenciones) el 04/03/2010 00:36:38
El problema es el siguiente:
Creo un cursor de una tabla Oracle.
dentro del Do Until ... Loop, segun algunas condiciones actualizo la misma tabla mediante un UPDATE con un where. Resulta que las condiciones son producto de una
busqueda en la misma tabla mediante un select.
El problema radica en que luego de hacer el update no puedo hacer un commit para
que la tabla se refresque ya que si lo hago el cursor vuelve al primer registro , y si no el hago el commit, cuando recupero el valor desde el select este aun no esta actualizado.
// creo cursor
Declare cursorA cursor for
select campo1,campo2 from TablaX
where campo3 = :ss1 order by campo3 ;
Open cursorAA;
Fetch cursorAA into :v1,:v2
DO UNTIL SQLca.SQLCode=100
// Busco condiciones en la misma tabla
Select fechaI, fechav into :kFi, :kFv from TablaX where campo3 =:var3
// hago los calculos necesarios con esos datos
// y luego grabo en la misma tabla
// - -- - - - - - - - - <--- G R A B A ----> - - - - - - - - - - - - - - - - - - - - - - //
UPDATE TablaX
set fechai = :dfec ,
fechav = :fVan
Where Campo3 =:var3 ;
COMMIT ; ================> si lo pongo vuelvo al inicio del Cursor
= ===============> si no lo pongo no actualiza la tabla Fetch cursorA into :v1, :v2;
LOOP
CLOSE CurSorA ;
No se, tal vez alla otra forma de hacerlo o tal vez usar el Fetch Next , se reciben
ideas ... Gracias
Creo un cursor de una tabla Oracle.
dentro del Do Until ... Loop, segun algunas condiciones actualizo la misma tabla mediante un UPDATE con un where. Resulta que las condiciones son producto de una
busqueda en la misma tabla mediante un select.
El problema radica en que luego de hacer el update no puedo hacer un commit para
que la tabla se refresque ya que si lo hago el cursor vuelve al primer registro , y si no el hago el commit, cuando recupero el valor desde el select este aun no esta actualizado.
// creo cursor
Declare cursorA cursor for
select campo1,campo2 from TablaX
where campo3 = :ss1 order by campo3 ;
Open cursorAA;
Fetch cursorAA into :v1,:v2
DO UNTIL SQLca.SQLCode=100
// Busco condiciones en la misma tabla
Select fechaI, fechav into :kFi, :kFv from TablaX where campo3 =:var3
// hago los calculos necesarios con esos datos
// y luego grabo en la misma tabla
// - -- - - - - - - - - <--- G R A B A ----> - - - - - - - - - - - - - - - - - - - - - - //
UPDATE TablaX
set fechai = :dfec ,
fechav = :fVan
Where Campo3 =:var3 ;
COMMIT ; ================> si lo pongo vuelvo al inicio del Cursor
= ===============> si no lo pongo no actualiza la tabla Fetch cursorA into :v1, :v2;
LOOP
CLOSE CurSorA ;
No se, tal vez alla otra forma de hacerlo o tal vez usar el Fetch Next , se reciben
ideas ... Gracias
Valora esta pregunta


0