gpt4 book ai didi

mysql - 模拟存储过程中的函数调用

转载 作者:行者123 更新时间:2023-11-29 14:12:52 25 4
gpt4 key购买 nike

(为了代码清晰,以下查询是对实际查询的极端简化)

我有一个存储过程,其中有一个查询:

SELECT
f1,
f2
FROM
T1
WHERE
T1.id IN (SELECT complex_id FROM t2 WHERE complex='condition')

我想在其他存储过程中重用内部查询(SELECT complex_id FROM t2 WHERE complex='condition'),但仅在一个地方保留其语法.
我如何使用数据库对象(SP、触发器等)和外部代码(如 PHP 等)来实现这一目标。

最佳答案

您应该创建一个 View :http://dev.mysql.com/doc/refman/5.5/en/create-view.html

CREATE VIEW reusable_query AS
SELECT complex_id FROM t2 WHERE complex='condition';

然后你可以:

SELECT * FROM t1 WHERE id IN (SELECT complex_id FROM reusable_query);

您可以使用如下存储过程更进一步:

CREATE FUNCTION isInReusableQuery(param INT) RETURNS BOOL
DELIMITER //
BEGIN
DECLARE cnt INT;
SELECT COUNT(complex_id) INTO cnt FROM reusable_query
WHERE
complex = 'condition'
AND complex_id = param;
RETURN cnt > 0;
END //
DELIMITER ;

这允许你做这样的事情:

SELECT * FROM t1 WHERE isInReusableQuery(id);

不过,我可能不会推荐后者。从存储的函数查询 View 可能会阻止某些optimisations .

关于mysql - 模拟存储过程中的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13181244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com