gpt4 book ai didi

Mysql - 存储过程参数中的表名

转载 作者:行者123 更新时间:2023-11-30 01:30:20 25 4
gpt4 key购买 nike

好的,这就是我尝试的方法。我可以毫无问题地执行此代码:

    CREATE DEFINER=`dbname`@`%.domain.com` PROCEDURE `test4`(_sort character(2), 
_start int, _page int, _seek varchar(64))

begin
select * from TABLE_OF_NAMES where

first_name like coalesce(concat('%', _seek, '%'), first_name) or
last_name like coalesce(concat('%', _seek, '%'), last_name)
and email in (select * from TempTable_emails)

order by

case when _sort = 'fa' then first_name end asc,
case when _sort = 'fd' then first_name end desc,
limit _start, _page;
end

现在我希望表 TempTable_emails 的名称应该是该过程的参数。我尝试以下操作:

    CREATE DEFINER=`dbname`@`%.domain.com` PROCEDURE `test4`(_sort character(2),
_start int, _page int, _seek varchar(64), _tablename varchar(64))
begin

set @a = concat(' select * from TABLE_OF_NAMES where
first_name like coalesce(%', _seek, '%), first_name) or
last_name like coalesce(%', _seek, '%), last_name) and
email in (select * from ',_tablename,')
order by
case when \'',_sort,'\' = \'fa\' then first_name end asc,
case when \'',_sort,'\' = \'fd\' then first_name end desc,
limit _start, _page;');

prepare stmt1 FROM @a;
execute stmt1;
deallocate prepare stmt1;
end

但这只会产生错误“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在 '%gauss%)、first_name) 或 last_name 附近使用的正确语法,如合并(% NAME%)、last_name) 和 ' 在第 2 行”

我觉得我可能应该看看错误是什么,但我就是无法让它工作......有人能立即看到我的错误是什么吗?

是否有另一种(可能更简单)的解决方法可以实现我想要实现的目标?

谢谢!

最佳答案

like coalesce(%', _seek, '%), first_name)

不会导致

like coalesce(concat('%', _seek, '%'), first_name)

这会导致类似的结果;

like coalesce(%gauss%), first_name)

其中,没有引号包围 %gauss% 不是有效的 SQL,并且您似乎在某处丢失了 concat

关于Mysql - 存储过程参数中的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17551819/

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