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