Ver Mensaje Individual
  #2  
Antiguo 03-11-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 947
Reputación: 25
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo te reocmiendo hacer lo siguiente:

1) Si deseas tener un valor correlativo para ID_USUARIO, utiliza un generador para ese campo.

Código SQL [-]

CREATE GENERATOR GEN_USUARIOS_ID;    
SET GENERATOR GEN_USUARIOS_ID TO 0;

CREATE TRIGGER USUARIOS_BI FOR USUARIOS
ACTIVE BEFORE INSERT POSITION 0                   
AS                                                
BEGIN                                             
     IF (NEW.ID_USUARIO IS NULL) THEN                
        NEW.ID_USUARIO = GEN_ID(GEN_USUARIOS_ID,1);
END

2) Te recomiento que uses una clave unica para el campo USUARIO, asi no tendrias usuarios repetidos.
Código SQL [-]
ALTER TABLE USUARIOS ADD CONSTRAINT UNQ1_USUARIOS UNIQUE (USUARIO);

3) Para controlar que solo se ingrese un usuario unico podrias usar una exception
Código SQL [-]
CREATE EXCEPTION ERROR_KEY_VIOLATION 
'Usuario ya existe!';

CREATE TRIGGER USUARIOS_BI FOR USUARIOS
ACTIVE BEFORE INSERT POSITION 0                   
AS                                                
BEGIN                                             
     IF (NEW.ID_USUARIO IS NULL) THEN                
        NEW.ID_USUARIO = GEN_ID(GEN_USUARIOS_ID,1);

    WHEN SQLCODE -803 DO        
             EXCEPTION ERROR_KEY_VIOLATION;
END

Olvide incluir tu codigo
Código SQL [-]
CREATE OR ALTER PROCEDURE INGRESO_USUARIO (USUARIO varchar(4),
      CLAVE varchar(8),
      NOMBRE varchar(35),
      EMAIL varchar(50),
      RUT varchar(50),
      NACIMIENTO date) asdeclare variable ID integer;
BEGIN
       --Estaria de mas por lo mensionado en el punto 1
       --SELECT coalesce(MAX(ID_USUARIO),0) + 1 FROM CLAVES INTO ID;

       INSERT INTO claves (ID_USUARIO, USUARIO, CLAVE, NOMBRE, EMAIL, RUT, NACIMIENTO) VALUES (NULL , :USUARIO, :CLAVE, :NOMBRE, :EMAIL, :RUT, :NACIMIENTO);
END
Bueno eso por ahora, espero te sirva...

Un abrazo
Responder Con Cita