MySQL Forums
Forum List  »  Stored Procedures

INSERT DYNAMIC SQL DOESNT GET VALUES
Posted by: Luis Badillo
Date: May 15, 2018 12:17AM

Hi everybody, i'm writing a store procedure, which is gonna be used to make backups for specifically some tables and enterprises, i'm using dynamic sql to make inserts and dumping into a file but my problem consists instead to print the values for each column, dynamic sql print columns.Help me please. Attach my code

/*Modifico el delimitador para que el motor de la base de datos, no termine con la ejecucion del store*/
DELIMITER $$
/*Borro el procedimiento almacenado, si este ya existe dentro de la base de datos*/
DROP PROCEDURE IF EXISTS respalda_datos_tablas$$
/*Creo el procedimiento almacenado para obtener datos de la tabla de acceso de modulos*/
CREATE PROCEDURE respalda_datos_tablas(param_id_empresa SMALLINT,param_nombre_tabla_respaldar VARCHAR(200),param_tabla_comparar VARCHAR(200),param_nombre_columna VARCHAR(200))
/*Defino la clausula de seguridad para checar los permisos y/o privilegios del usuario que ejecuta el script*/
SQL SECURITY INVOKER
/*Comienza el cuerpo de instrucciones del procedimiento almacenado*/
BEGIN
/*Asigno a la variable columnas en formato lineal el valor devuelto por la consulta*/
SET @consulta_columnas_formato_lineal=CONCAT("SELECT GROUP_CONCAT(TABLE_NAME,'.',COLUMN_NAME) INTO @columnas_tabla FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='",param_nombre_tabla_respaldar,"'
AND COLUMN_NAME NOT REGEXP '^id$';");
/*Preparo la consulta para que sea interpretada y ejecutada*/
PREPARE stmt_consulta_columnas_formato_lineal FROM @consulta_columnas_formato_lineal;
/*Ejecuto la sentencia preparada*/
EXECUTE stmt_consulta_columnas_formato_lineal;
/*Borro la sentencia preparada para posteriores ejecuciones*/
DEALLOCATE PREPARE stmt_consulta_columnas_formato_lineal;
/*Pregunto si la tabla a comparar es la de Empresas*/
IF param_tabla_comparar='Empresas' THEN
/*Escribo la consulta para que sea de manera dinamica a traves de la funcion concat, donde le paso el id de la empresa*/
SET @consulta_respaldar_tabla=CONCAT("SELECT 'INSERT LOW_PRIORITY INTO Call_Center_Infinit_",param_id_empresa,".",
param_nombre_tabla_respaldar,"(",@columnas_tabla,") VALUES(`",@columnas_tabla,"`);'
INTO OUTFILE '/var/lib/mysql/respalda_datos_tbl_",param_nombre_tabla_respaldar,"_",DATE_FORMAT(CURRENT_TIMESTAMP(),'%d%b%Y_%H%i'),".sql'
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '""'
LINES TERMINATED BY '\n'
FROM ",param_nombre_tabla_respaldar,"
INNER JOIN ",param_tabla_comparar,"
ON ",param_nombre_tabla_respaldar,".id=",param_tabla_comparar,".",param_nombre_columna,"
WHERE ",param_tabla_comparar,".id=",param_id_empresa,";");
/*En caso contrario, consulto de distinta manera*/
ELSE
SET @consulta_respaldar_tabla=CONCAT("SELECT 'INSERT LOW_PRIORITY INTO Call_Center_Infinit_",param_id_empresa,".",
param_nombre_tabla_respaldar,"(",@columnas_tabla,") VALUES(`",@columnas_tabla,"`);'
INTO OUTFILE '/var/lib/mysql/respalda_datos_tbl_",param_nombre_tabla_respaldar,"_",DATE_FORMAT(CURRENT_TIMESTAMP(),'%d%b%Y_%H%i'),".sql'
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '""'
LINES TERMINATED BY '\n'
FROM ",param_tabla_comparar,"
INNER JOIN ",param_nombre_tabla_respaldar,"
ON ",param_tabla_comparar,".id=",param_nombre_tabla_respaldar,".",param_nombre_columna,"
WHERE ",param_tabla_comparar,".id_empresa=",param_id_empresa,";");
/*Cierro el condicional IF*/
END IF;
SELECT @consulta_respaldar_tabla;
/*Finaliza el cuerpo de instrucciones del procedimiento almacenado*/
END $$

Options: ReplyQuote


Subject
Views
Written By
Posted
INSERT DYNAMIC SQL DOESNT GET VALUES
399
May 15, 2018 12:17AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.