我创建了这个 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 不是我的迁移工具用例的选项! (它仍然失败)