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 originalCREATE TABLE usuarios (user_id varchar2, password varchar2)
/
CREATE UNIQUE INDEX idx_usuarios ON usuarios(user_id)
/
CREATE OR REPLACE PROCEDURE insertar_usuario
( user_id varchar2,
password varchar2,
existe OUT NUMBER
) IS
BEGIN
existe := 0;
INSERT INTO usuarios (user_id, password);
exception
WHEN others THEN
IF sqlcode = 'ORA-00001' THEN --código ORA por valor duplicado
existe := 1;
END IF;
END;
/
De esta manera, con una única operación INSERT puedes validar e insertar el usuario.
Saludos