Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Sintaxis correcta de procedure para almacenar datos en variables y manipular tablas

Estas en el tema de Sintaxis correcta de procedure para almacenar datos en variables y manipular tablas en el foro de Mysql en Foros del Web. Hola amigos, estoy tratando de hacer un procedure para recibir vendedores, pero desconozco la sintaxis, alguien tendria la amabilidad de ayudame ? mi vendedor tiene ...
  #1 (permalink)  
Antiguo 26/11/2008, 09:36
 
Fecha de Ingreso: noviembre-2008
Mensajes: 2
Antigüedad: 15 años, 4 meses
Puntos: 0
Pregunta Sintaxis correcta de procedure para almacenar datos en variables y manipular tablas

Hola amigos, estoy tratando de hacer un procedure para recibir vendedores, pero desconozco la sintaxis, alguien tendria la amabilidad de ayudame ?

mi vendedor tiene un codigo alfanumérico, pero internamente tiene un id numerico, necesito saber si ya existe el codigo y obtener el id, si no existe agregarlo, pero el nombre es igualmente un id de una tabla de nombres,
asi que al recibir mis datos, primero tengo que buscar los nombres, obtener el id de nombre de pila y apellido, buscar la combinacion en la tabla bombres, si no lo encuentro lo agrego y regreso el id.

Código:
CREATE TABLE CAR_NOMPIL (
	IDNOMPIL INTEGER NOT NULL,
	NOMBRE VARCHAR(50) NOT NULL,
	PRIMARY KEY (IDNOMPIL),
	UNIQUE (NOMBRE)
);


CREATE TABLE CAR_APELLIDOS (
	IDAPELLIDO INTEGER NOT NULL,
	APELLIDO VARCHAR(50) NOT NULL,
	PRIMARY KEY (IDAPELLIDO),
	UNIQUE (APELLIDO)
);


CREATE TABLE CAR_NOMBRES (
	IDNOMBRE" INTEGER NOT NULL,
	IDAPPAT INTEGER NOT NULL,
	IDAPMAT INTEGER NOT NULL,
	IDNOM1 INTEGER NOT NULL,
	IDNOM2 INTEGER NOT NULL,
	NOMCOMP VARCHAR(200) NOT NULL,
	PRIMARY KEY (IDNOMBRE),
	UNIQUE (NOMCOMP),
	UNIQUE (IDAPPAT,IDAPMAT,IDNOM1,IDNOM2)
);
mi tabla de vendedor
Código:
CREATE TABLE VENDEDOR (
	CODIGO CHAR(3),
	NOMBRE CHAR(20),
	IDVND INTEGER,
	IDNOMBRE INTEGER);
mi procedure ( en otra base de datos Solid SQL Server )

Código:
"CREATE PROCEDURE BUSNOMBRE ( APPAT VARCHAR(50), APMAT VARCHAR(50), NOM1 VARCHAR(50), NOM2 VARCHAR(50))
	RETURNS(IDNOMBRE INTEGER)
BEGIN
   DECLARE IDNOM1 INTEGER;
   DECLARE IDNOM2 INTEGER;
   DECLARE IDAPPAT INTEGER;
   DECLARE IDAPMAT INTEGER;
   DECLARE ANTIDAPPAT   INTEGER;
   DECLARE ANTIDAPMAT   INTEGER;
   DECLARE ANTIDNOMB1   INTEGER;
   DECLARE ANTIDNOMB2   INTEGER;
   DECLARE NOMCOMP_Z   VARCHAR(200);
   APPAT := LTRIM(RTRIM(APPAT));
   APMAT := LTRIM(RTRIM(APMAT));
   NOM1  := LTRIM(RTRIM(NOM1));
   NOM2  := LTRIM(RTRIM(NOM2));
   NOMCOMP_Z := RTRIM( RTRIM(RTRIM(APPAT + ' ' + APMAT) + ' ' + NOM1) + ' ' + NOM2);
   EXEC SQL PREPARE BUSNOMBRE1 SELECT IDNOMBRE,IDAPPAT, IDAPMAT, IDNOM1, IDNOM2
     FROM CAR_NOMBRES A
     WHERE NOMCOMP = ?;
   EXEC SQL PREPARE BUSNOMBRE4 CALL CAR_BUSNOM(?);
   EXEC SQL PREPARE BUSNOMBRE8 CALL CAR_BUSNOM2(?);
   EXEC SQL PREPARE BUSNOMBRE5 CALL CAR_BUSAPELLIDO(?);
   EXEC SQL PREPARE BUSNOMBRE7 CALL CAR_BUSAPELLI2(?);
   EXEC SQL PREPARE BUSNOMBRE2 SELECT MAX(IDNOMBRE) FROM CAR_NOMBRES WHERE IDNOMBRE > 0;
   EXEC SQL PREPARE BUSNOMBRE3 INSERT INTO CAR_NOMBRES (IDNOMBRE, IDAPPAT, IDAPMAT, IDNOM1, IDNOM2, NOMCOMP)
     VALUES (?,?,?,?,?,?);
   EXEC SQL PREPARE BUSNOMBRE6 UPDATE CAR_NOMBRES
     SET IDAPPAT=?, IDAPMAT=?, IDNOM1=?, IDNOM2=? WHERE IDNOMBRE=?;
   EXEC SQL EXECUTE BUSNOMBRE4 USING(NOM1) INTO (IDNOM1);
   EXEC SQL FETCH BUSNOMBRE4;
   EXEC SQL EXECUTE BUSNOMBRE8 USING(NOM2) INTO (IDNOM2);
   EXEC SQL FETCH BUSNOMBRE8;
   EXEC SQL EXECUTE BUSNOMBRE5 USING(APPAT) INTO (IDAPPAT);
   EXEC SQL FETCH BUSNOMBRE5;
   EXEC SQL EXECUTE BUSNOMBRE7 USING(APMAT) INTO (IDAPMAT);
   EXEC SQL FETCH BUSNOMBRE7;

   EXEC SQL EXECUTE BUSNOMBRE1 USING (NOMCOMP_Z) INTO (IDNOMBRE, ANTIDAPPAT, ANTIDAPMAT, ANTIDNOMB1, ANTIDNOMB2);
   EXEC SQL FETCH BUSNOMBRE1;
   IF SQLSUCCESS = 1  THEN
       IF (ANTIDAPPAT <> IDAPPAT) OR (ANTIDAPMAT <> IDAPMAT) OR (ANTIDNOMB1 <> IDNOM1) OR (ANTIDNOMB2 <> IDNOM2) THEN
         EXEC SQL EXECUTE BUSNOMBRE6 USING (IDAPPAT, IDAPMAT, IDNOM1, IDNOM2, IDNOMBRE);
       END IF
       RETURN ROW;
   ELSE
     EXEC SQL EXECUTE BUSNOMBRE2 INTO (IDNOMBRE);
     EXEC SQL FETCH BUSNOMBRE2;
     IF IDNOMBRE IS NULL THEN
       IDNOMBRE := 0;
     END IF
     IDNOMBRE := IDNOMBRE + 1;
     EXEC SQL EXECUTE BUSNOMBRE3 USING (IDNOMBRE, IDAPPAT, IDAPMAT, IDNOM1, IDNOM2, NOMCOMP_Z);
     RETURN ROW;
  END IF
  EXEC SQL DROP BUSNOMBRE1;
  EXEC SQL DROP BUSNOMBRE2;
  EXEC SQL DROP BUSNOMBRE3;
  EXEC SQL DROP BUSNOMBRE4;
  EXEC SQL DROP BUSNOMBRE5;
  EXEC SQL DROP BUSNOMBRE6;
  EXEC SQL DROP BUSNOMBRE7;
  EXEC SQL DROP BUSNOMBRE8;
END ";


drop PROCEDURE AGREGA_VND; commit work;

"CREATE PROCEDURE AGREGA_VND(codigo_z varchar(4), appat_z varchar(50), APMAT_Z VARCHAR(50), NOMPIL1_Z VARCHAR(50), NOMPIL2_Z VARCHAR(50) )
RETURNS ( IDNOMBRE_Z INTEGER, idvnd_z integer, nombre_z varchar(250))
BEGIN

  EXEC SQL PREPARE BUS_VEND SELECT IDVND, idNOMBRE FROM VENDEDOR WHERE codigo=?;
  EXEC SQL PREPARE BUS_NOM CALL BUSNOMBRE (?, ?, ?, ?);
  exec sql prepare ins_vend insert into vendedor (codigo,nombre,idvnd,idnombre) values (?,?,?,?);
  exec sql prepare bus_sigidvnd select max(idvnd) from vendedor where idvnd > 0;

  NOMbre_Z := RTRIM( RTRIM(RTRIM(APPAT_Z + ' ' + APMAT_Z) + ' ' + NOMPIL1_Z) + ' ' + NOMPIL2_Z);
  EXEC SQL EXECUTE BUS_VEND using( codigo_z) INTO (IDVND_Z, idNOMBRE_Z);
  EXEC SQL FETCH BUS_VEND;
  if SQLSUCCESS <> 1 then
    exec sql execute bus_sigidvnd into (idvnd_z);
    exec sql fetch bus_sigidvnd;
    if idvnd_z is null then
      idvnd_z := 0;
    end if
    idvnd_z := idvnd_z + 1;
    EXEC SQL EXECUTE BUS_NOM USING (APPAT_Z, APMAT_Z, NOMPIL1_Z, NOMPIL2_Z) INTO (IDNOMBRE_Z);
    EXEC SQL FETCH BUS_NOM;
    EXEC SQL EXECUTE ins_VEND USING (codigo_z, nombre_z, IDVND_Z, IDNOMBRE_Z);
  end if
  RETURN ROW;
  EXEC SQL DROP BUS_VEND;
  EXEC SQL DROP BUS_NOM;
  EXEC SQL DROP ins_VEND;
  EXEC SQL DROP bus_sigidvnd;
END";

commit work;

call AGREGA_VND('MDL', 'MAY', 'DZUL', 'LINA', 'TRINIDAD');
commit work;
Cualquier ayuda será bienvenida.

Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:49.