Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
Procedimiento almacenado + condicion

Hola, muy buenas.Utilizo Firebird 2.0, y quiero utilizar un procedimiento almacanado para guardar un registro en la tabla "CLAVES".

Utilizo esto... no puedo ocupar la herramiento para escribir texto 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
SELECT coalesce(MAX(ID_USUARIO),0) + 1 FROM CLAVES INTO ID;

INSERT INTO claves (ID_USUARIO, USUARIO, CLAVE, NOMBRE, EMAIL, RUT, NACIMIENTO) VALUES (:ID, :USUARIO, :CLAVE, :NOMBRE, :EMAIL, :RUT, :NACIMIENTO);

end


Con esto tengo resuelto el problema de la columna con clave primaria "ID_USUARIO", ahora bien puede ocurrir que se ingresen mas de un registro iguales para la columna "USUARIO", lo cual no está bien, pero tampoco me va a generar un problema en la BD, ya que tengo la clave primaria distinta.
Por otro lado quise utilizar una clave primaria compuesta por los campos ID_USUARIO Y USUARIO, tampoco me sirve.Entonces se me ocurrio la idea de agregar una consulta en el procedimiento, que cheque antes de guardar el registro, si existe un registro con el mismo campo "USUARIO", en caso que si existe me arroje un mensaje... como se puede hacer esto??

Espero me puedan ayudar.

Última edición por mjjj fecha: 03-11-2010 a las 17:55:47. Razón: problemas de formato
Responder Con Cita
  #2  
Antiguo 03-11-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 947
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
procedimiento almacenado JAI_ME Varios 5 02-09-2008 16:24:58
procedimiento almacenado lurad Oracle 2 01-03-2008 05:05:25
Procedimiento Almacenado rruffino Conexión con bases de datos 1 25-04-2007 18:52:51
Procedimiento Almacenado scooterjgm Conexión con bases de datos 5 18-01-2005 18:21:32
Procedimiento almacenado y Ado LucianoRey MS SQL Server 11 06-07-2004 22:55:23


La franja horaria es GMT +2. Ahora son las 17:15:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi