Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Ayuda RollBack / Commit

Estas en el tema de Ayuda RollBack / Commit en el foro de PostgreSQL en Foros del Web. Buenas, Alguien me puede dar un ejemplo practico de como se utiliza el RollBack y el Commit.. Saludos.....
  #1 (permalink)  
Antiguo 24/11/2010, 09:23
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Ayuda RollBack / Commit

Buenas, Alguien me puede dar un ejemplo practico de como se utiliza el RollBack y el Commit..

Saludos..
  #2 (permalink)  
Antiguo 24/11/2010, 09:52
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Ayuda RollBack / Commit

Saludos

Cita:
//Inicialmente debes indicar que vas a empezar una transaccion
BEGIN
//Realizas las sentecias insert, update, detele......... que necesites
//Al terminar las sentencias realizas una validación si en alguna de ellas hubo un error
ROLLBACK
//Si todas las sentencias se ejecutaron correctamente
COMMIT
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 24/11/2010, 10:16
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Ayuda RollBack / Commit

y en este ejemplo como seria ?

por que yo lo coloco y me manda error

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION ........   RETURNS text AS $BODY$
  2. DECLARE
  3. .
  4. .
  5. .
  6. BEGIN
  7. IF (SELECT COUNT(*) FROM personas WHERE id_persona = RUT) = 0 THEN                                                 
  8.                     INSERT INTO PERSONAS (id_persona,nombre,apellido,celular,email,fono) VALUES(RUT,PNOMBRE,PAPELLIDO,PCELULAR,PEMAIL,PFONO);
  9.                     IF PERFIL = 'TALLER' THEN
  10.                         CODIGO = TMPLoc ('CODIGO',CADENA);
  11.                         SELECT INTO contador COUNT(*) FROM usuario_has_perfiles_acceso WHERE id_perfil_acceso = 5 AND id_sub_perfil_acc = 1 AND id_local = CODIGO;
  12.                         IF contador = 0 THEN                       
  13.                             INSERT INTO usuario_has_perfiles_acceso (id_perfil_acceso,id_sub_perfil_acc,id_local)VALUES(5,1,CODIGO);
  14.                             SELECT INTO IDUSUHASP CURRVAL(pg_get_serial_sequence('usuario_has_perfiles_acceso','id_usu_has_per_acc'));
  15.                         ELSE                           
  16.                             SELECT INTO IDUSUHASP id_usu_has_per_acc FROM usuario_has_perfiles_acceso WHERE id_perfil_acceso = 5 AND
  17.                             id_sub_perfil_acc = 1 AND id_local = CODIGO;
  18.                         END IF;
  19.                         INSERT INTO USUARIOS (id_usu_has_per_acc,id_persona,login,password)VALUES(IDUSUHASP,RUT,PEMAIL,CONTRASENA);                    
  20.                         COMMIT;
  21.  
  22.                        
  23.                         RETURN 'OK';
  24.                     ELSIF PERFIL = 'LOCAL' THEN
  25.                         DIR = TMPLoc ('NOMBRELOCAL',CADENA);
  26.                         SELECT INTO CODIGO ID_LOCAL FROM LOCALES WHERE DIRECCION = DIR;
  27.                         SELECT INTO contador COUNT(*) FROM usuario_has_perfiles_acceso WHERE id_perfil_acceso = 2 AND id_sub_perfil_acc = 3 AND id_local =
  28.                         (SELECT ID_LOCAL FROM LOCALES WHERE DIRECCION = DIR LIMIT 1);                      
  29.                         IF contador = 0 THEN
  30.                             INSERT INTO usuario_has_perfiles_acceso (id_perfil_acceso,id_sub_perfil_acc,id_local)VALUES(2,3,CODIGO);
  31.                             SELECT INTO IDUSUHASP CURRVAL(pg_get_serial_sequence('usuario_has_perfiles_acceso','id_usu_has_per_acc'));
  32.                         ELSE
  33.                             SELECT INTO IDUSUHASP id_usu_has_per_acc FROM usuario_has_perfiles_acceso WHERE id_perfil_acceso = 2 AND
  34.                             id_sub_perfil_acc = 3 AND id_local = CODIGO;
  35.                         END IF;
  36.                         INSERT INTO USUARIOS (id_usu_has_per_acc,id_persona,login,password)VALUES(IDUSUHASP,RUT,PEMAIL,CONTRASENA);
  37.                         COMMIT;
  38.                        
  39.                         RETURN 'OK';
  40.                     END IF;                
  41.                 ELSE   
  42.                     ROLLBACK;
  43.                     RETURN 'La Persona ya existe en el sistema';
  44.                 END IF;
  45.     END;
  46. $BODY$
  47.   LANGUAGE 'plpgsql'
  #4 (permalink)  
Antiguo 24/11/2010, 12:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda RollBack / Commit

death_nemesis

Una función en postgresql trae una transacción implicita.

No es necesario que pongas esto.

Si hay un error en la linea N de la función y anterior a esta linea se hicieron 1000 actualizaciones de registros, la función automaticamente hace un rollback.

Por esta razón al interior de una función estas clausulas no son soportadas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 24/11/2010, 12:56
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Ayuda RollBack / Commit

Cita:
Iniciado por Nano_ Ver Mensaje
Saludos
Cita:
Iniciado por huesos52 Ver Mensaje
death_nemesis

Una función en postgresql trae una transacción implicita.

No es necesario que pongas esto.

Si hay un error en la linea N de la función y anterior a esta linea se hicieron 1000 actualizaciones de registros, la función automaticamente hace un rollback.

Por esta razón al interior de una función estas clausulas no son soportadas.

saludos
Gracias por aclararme esto

Etiquetas: commit, rollback
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:21.