Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/11/2010, 10:16
Avatar de death_nemesis
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'