我必须在数据库中搜索存在指定列值的表名。列名是“nummer”,我想把这个值作为过程的参数。我使用的dbms是mariadb 10.3
我的想法是首先选择“nummer”列所在的每个表,然后遍历这些表并检查值是否存在。然后我想“返回”在其中找到值的表名。
我已经完成了查找“nummer”列所在的所有表的工作:
select table_name from information_schema.columns where column_name = 'Nummer'
现在我认为使用for循环和遍历每个表来搜索值会很有用:
create or replace procedure Forloop (
in param_nummer int unsigned
)
for i in (select table_name from information_schema.columns where column_name = 'Nummer')
do
-- if exists (select * from i where 'Nummer' = param_nummer);
-- return i (table_name) ?
end for;
end//
delimiter;
call forloop();
问题是,当我执行这个过程时,mariadb似乎没有在select语句中使用隐式游标“i”。我得到了错误“dbname.i”找不到,或类似的东西。我怎么能做到呢?
1条答案
按热度按时间bvjxkvbb1#
以下是您需要的部分代码:
在你的尝试中,你做到了
SELECT table_name ...
. 而不仅仅是table_name
,构造需要执行的查询。用一个凌乱的CONCAT(...)
(我将在下面提供)。在下一步之前,查看select的输出。应该是几排
那你必须
prepare
以及execute
找到每一行。这会给你其中1表示真,0表示假。
好的,现在我来修好concat让它工作。请记住,sql没有办法像许多其他语言那样“插值”。也就是说,我们需要完全依靠
CONCAT
.-->