Store Procedure no ejecuta inserts.
Publicado por Emerson Palacios (29 intervenciones) el 31/05/2008 04:34:14
hola amigos, que tal???. bueno amigos queria pedirles ayuda son un store procedure que me tiene loco, bueno mas o menos le explico de que se trata el store bueno pasa que tengo un grupo de bases de datos las cuales tienes la misma estructura y en algunas tablas de estas bases de datos quiero que se tengan los mismos datos para lo cual he diseñado un procedure que cuando uno ingresa un campo en una base de datos automaticamente este se ingresa en todo el grupo de bases de datos. el procedure es el siguiente:
DELIMITER //
CREATE PROCEDURE INSERTA (in tabla VARCHAR(20),in nombre VARCHAR(30))
begin
declare done INT default 0;
declare base varchar(50);
declare basetabla varchar(100);
declare campo varchar(20);
declare bases cursor for select replace(ntienda,' ','') from tiendas;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
open bases;
REPEAT
IF NOT done THEN
FETCH bases INTO base;
set basetabla = CONCAT(base,'.',tabla);
set campo = CONCAT('N',tabla);
select basetabla,campo,valor1,valor2;
insert into basetabla (campo,eliminado) values (nombre,'1');
end if;
UNTIL done END REPEAT;
close bases;
end//
DELIMITER ;
si borro la linea del insert el procedure me devuelve el valor de las variables de lo mas normal osea que el procedure sintacticamente esta bien. Cuando le pongo el insert tambien me acepta grabar el procedure. pero los problemas vienen al ejecutarlo me sale el siguiente error " ERROR 1146 : Table 'almacencentral.basetabla' doesn't exist ". como veran basetabla es mi variable y la utilizo justo despues del INSERT INTO por lo que me parece que el motor de la base de datos erroneamente esta tomando el nombre de mi variable BASETABLA y no el valor que esta guarda y lo peor de todo es que lo esta uniendo con el nombre de la base de datos donde se esta ejecutando el store. bueno el problemas es como le digo al MYSQL que Basetabla es una variable. noten que una linea arriba del insert, hay un select y este si me muestra correctamente los valores de las variables. a ver si me dan una manito. Muchas gracias de antemano.
DELIMITER //
CREATE PROCEDURE INSERTA (in tabla VARCHAR(20),in nombre VARCHAR(30))
begin
declare done INT default 0;
declare base varchar(50);
declare basetabla varchar(100);
declare campo varchar(20);
declare bases cursor for select replace(ntienda,' ','') from tiendas;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
open bases;
REPEAT
IF NOT done THEN
FETCH bases INTO base;
set basetabla = CONCAT(base,'.',tabla);
set campo = CONCAT('N',tabla);
select basetabla,campo,valor1,valor2;
insert into basetabla (campo,eliminado) values (nombre,'1');
end if;
UNTIL done END REPEAT;
close bases;
end//
DELIMITER ;
si borro la linea del insert el procedure me devuelve el valor de las variables de lo mas normal osea que el procedure sintacticamente esta bien. Cuando le pongo el insert tambien me acepta grabar el procedure. pero los problemas vienen al ejecutarlo me sale el siguiente error " ERROR 1146 : Table 'almacencentral.basetabla' doesn't exist ". como veran basetabla es mi variable y la utilizo justo despues del INSERT INTO por lo que me parece que el motor de la base de datos erroneamente esta tomando el nombre de mi variable BASETABLA y no el valor que esta guarda y lo peor de todo es que lo esta uniendo con el nombre de la base de datos donde se esta ejecutando el store. bueno el problemas es como le digo al MYSQL que Basetabla es una variable. noten que una linea arriba del insert, hay un select y este si me muestra correctamente los valores de las variables. a ver si me dan una manito. Muchas gracias de antemano.
Valora esta pregunta


0