存储过程准备好的语句 - MySQL - 使用准备好的语句结果作为变量

时间:2021-03-19 09:38:59

标签: mysql stored-procedures prepared-statement

我创建了这个 MySQL 存储过程:(在 DBeaver 中编辑,因此它会自动处理添加/更改分隔符)

CREATE PROCEDURE databasename.QueryByFilterOnOtherDb(IN dbName VARCHAR(100), IN tableName VARCHAR(100), IN fieldName VARCHAR(100))
BEGIN
    DECLARE thisdb VARCHAR(100);
    SET thisdb = (SELECT DATABASE());
    SET @dbName = dbName;
    SET @tableName = tableName;
    SET @fieldName = fieldName;

    SET @filterquery = CONCAT('SELECT * FROM `', @thisdb , '`.`', @tableName, '`', 
        ' WHERE ', @fieldName, ' IN (SELECT `', @fieldName, '` FROM `', @dbname, '`.`', @tableName, '`);'
    );
    
    PREPARE stmt FROM @filterquery;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt; 

    /* SELECT @filterquery; */
END 

SQL 查询结果(SELECT @filterquery)

SELECT * FROM `databasename`.`eav_attribute_group` WHERE attribute_set_id IN (SELECT `attribute_set_id` FROM `otherdb`.`eav_attribute_group`);

结果集是准备好的语句的结果(一个所有行/列匹配attribute_set_id的表,换句话说,多列/行 ).

我想在存储过程中或在另一个存储过程的结果集中使用这个结果:

PREPARE stmt FROM @filterquery;

SET @resultset= EXECUTE stmt;
    DEALLOCATE PREPARE stmt; 

// Loop through resultset
// for each row
// SELECT @col1, @col2 IN ROW

CREATE PROCEDURE AnotherProcedure()
BEGIN
SET resultset= QueryByFilterOnOtherDb('','','');
// Loop through resultset
// SELECT @col1, @col2 IN ROW
END

这可能吗?

我必须比较一些 Magento1 和 Magento2 表,并删除 Magento2 条目,以便迁移工具可以正常工作 - 所以有几个表我想做同样的事情。 TRUNCATE 不是我的迁移工具用例的选项! (它仍然失败)

0 个答案:

没有答案