gpt4 book ai didi

MySQL动态设置数据库名称并选择db.schematable

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

我正在创建一个存储过程,它需要许多输入参数。我希望能够选择要使用的数据库,然后根据如下所示的条件,我想使用正确的 where 条件。

我知道你不能在存储过程中使用“USE”关键字,我也尝试在查询中设置@ds,但没有成功。

我正在使用 Navicat 并在 IDE 中定义了我的参数,我的输入参数是:

  • icustomername varchar(255)
  • ipostcode varchar(255)
  • iaccountnumber varchar(255)
  • imemberdbname varchar(255)

SQL

BEGIN
declare dbName varchar(255); --attempt at using db name passed in
select imemberdbname into dbName;
set @ds = concat(dbName,'.customers'); -- I have also tried this

if LENGTH(icustomername) > 0 THEN
(Select customerid, customername, postcode, accountnumber from dbName.customers
WHERE customername = icustomername);
ELSEIF len(ipostcode) > 0 THEN
(Select customerid, customername, postcode, accountnumber from dbName.customers
WHERE postcode = ipostcode);
ELSE
(Select customerid, customername, postcode, accountnumber from dbName.customers
WHERE accountnumber = iaccountnumber);
end if;

END

我无法选择 db.table 来执行选择。有没有办法做到这一点?或者有更好的解决方案吗?

最佳答案

您可以使用prepared statement来做到这一点。

一个非常基本的准备好的语句看起来像这样:

SET @stat = CONCAT('SELECT * FROM ', @tab'); 

PREPARE stmt FROM @stat;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

编辑:最基本语句的完整示例,使用 if 语句为“where”和“table”子句设置变量,应该没问题!

EDIT2:认为您不想使用使用传入参数的语句,编辑查询。

EDIT3:基本上完成了存储过程,您可以使用CALL test('dbname.tablename')来调用该过程这里提供的参数是tablename/dbname.tablename。

CREATE DEFINER=`user`@`%` PROCEDURE `test`(IN tbl VARCHAR(255))
BEGIN
DECLARE cols VARCHAR(255);
DECLARE conditions VARCHAR(255);

SET cols = 'customerid, customername, postcode, accountnumber';


IF LENGTH(icustomername) > 0 THEN
SET conditions = CONCAT("customername = '", icustomername, "'");

ELSEIF len(ipostcode) > 0 THEN
SET conditions = CONCAT("postcode = '", ipostcode, "'");

ELSE SET conditions = CONCAT("accountnumber = '", iaccountnumber , "'");
END IF;

SET @stat = CONCAT('SELECT ', cols, ' FROM ', tbl, ' WHERE ', conditions );
PREPARE stmt from @stat;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END

-------
CALL test('tablename');

关于MySQL动态设置数据库名称并选择db.schematable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59835784/

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