Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/05/2012, 08:03
davikt
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: Inserciones con bucles en MYSQL

Hola 60NZ4,

No has dado muchos datos para poder resolver el problema en condiciones, pero supongo que habrá una FK entre clientes y tiendas. Esto ya complica un poco el asunto porque primero deben estar los clientes para poder añadir las tiendas, por lo que serán 2 instrucciones las que tengas que meter manualmente.

Te dejo el código.

Primero creamos la base de datos:
Código:
-- Creamos la DB
drop schema if exists data;
create schema data;
use data;

-- Creamos las tablas
create table clientes (
        id_cli int primary key auto_increment,
        nombre varchar(50)
        );
        
create table tiendas (
        id_tie int primary key auto_increment,
        nombre varchar(50),
        fk_id_cli int
        );

-- Creamos la FK
alter table tiendas add constraint fk_cliente foreign key (fk_id_cli) references clientes(id_cli);
Ahora creamos los procedimientos:
Código:
delimiter $$

-- Creamos un procedimiento por el cual añadiremos clientes
create procedure sp_datos_clientes (int_datos int)
        begin
                declare i int default 0;
                declare i_tot int default 0;
                
                set i=(select count(id_cli) from clientes)+1;
                set i_tot=i+int_datos;
                
                repeat
                        insert into clientes values(null,concat('Cliente ',i));
                        set i=i+1;
                until i >= i_tot end repeat;
end$$

-- Creamos un procedimiento por el cual añadiremos tiendas a los clientes
create procedure sp_datos_tiendas(n_tiendas int)
        begin
                declare cli int default 0;
                declare cli_tot int default 0;
                declare i int default 1;
                
                set cli=((select distinct count(fk_id_cli) from tiendas)/10)+1;
                set cli_tot=cli+n_tiendas;
                
                repeat
                        repeat
                                insert into tiendas values(null,concat('Tienda ',i),cli);
                                set i=i+1;
                        until i >10 end repeat;
                        set cli=cli+1;
                        set i=1;
                until cli>=cli_tot end repeat;
end $$

delimiter ;
Y por último los ejecutamos:
Código:
call sp_datos_clientes(30);
call sp_datos_tiendas(30);
¡OJO! El argumento debe ser el mismo en las 2 llamadas, si no no se creará todo correctamente y puede que te de errores. Eso si, las puedes ejecutar todas las veces que quieras. Las dos seguidas (eso si), y con el mismo argumento (30 o 20 o 100 o el que sea).

¡Un saludo!