Ver Mensaje Individual
  #10 (permalink)  
Antiguo 07/10/2012, 21:33
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Respuesta: saber si el registro existe

Cita:
Caballeros, buenas tardes, estoy tratando de validar si un usuario existe en la base antes de insertarlo.
No se recomienda hacer un SELECT para validar si existe el usuario, ya que es una operación innecesaria y además puede dar falsos negativos en casos de transacciones simultaneas, es decir, si una transacción inserta el usuario y otra transacción hace el SELECT antes del commit de la primera.

Utilizando un índice unique y las excepciones de PL/SQL puedes optimizar el tiempo y simplificar el código del proceso, por ejemplo:

Código SQL:
Ver original
  1. CREATE TABLE usuarios (user_id varchar2, password varchar2)
  2. /
  3. CREATE UNIQUE INDEX idx_usuarios ON usuarios(user_id)
  4. /
  5. CREATE OR REPLACE PROCEDURE insertar_usuario
  6. ( user_id varchar2,
  7.   password varchar2,
  8.   existe OUT NUMBER
  9. ) IS
  10. BEGIN
  11.  existe := 0;
  12.  INSERT INTO usuarios (user_id, password);
  13.  exception
  14.       WHEN others THEN
  15.          IF sqlcode = 'ORA-00001' THEN --código ORA por valor duplicado
  16.           existe := 1;
  17.          END IF;
  18. END;
  19. /
De esta manera, con una única operación INSERT puedes validar e insertar el usuario.

Saludos

Última edición por gnzsoloyo; 08/10/2012 a las 20:34