gpt4 book ai didi

mysql - 是否可以将变量传递给mysql中的存储过程调用?

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

我正在尝试执行以下操作,我想知道这在 MySQL 中是否可行:

CREATE PROCEDURE `sp_test`(
ulon int(4),
usrname varchar(20),
usrst varchar(20),
usrdt varchar(10)
)
BEGIN
DECLARE bid int(11);
START TRANSACTION;
SELECT t_bid INTO bid FROM generalb WHERE dt=usrdt;
INSERT
INTO
rslt
(
rbid,
rusrname,
rusrst,
usrdt
)
VALUES
(
bid,
usrname,
usrst,
usrdt
);
call sp_nextproc_13(bid, ulon);
COMMIT;
END;

看这一行:

call sp_nextproc_13(bid, ulon);

我怎样才能实现这样的目标:

调用 sp_nextproc_@bid(bid, ulon);

我需要能够动态调用一个过程,因为在获得出价之前我不知道该过程的名称。如果有人知道答案,非常感谢

<小时/>

最新更新:

我做了以下更改:

CREATE PROCEDURE `sp_test`(
ulon int(4),
usrname varchar(20),
usrst varchar(20),
usrdt varchar(10)
)
BEGIN
DECLARE bid int(11);
START TRANSACTION;
SELECT t_bid INTO bid FROM generalb WHERE dt=usrdt;
INSERT
INTO
rslt
(
rbid,
rusrname,
rusrst,
usrdt
)
VALUES
(
bid,
usrname,
usrst,
usrdt
);

SET @sql=concat('call sp_nextproc_',bid,'(?,?)');
PREPARE stmt FROM @sql;
SET @var1=bid;
SET @var2=ulon;
EXECUTE stmt USING @var1, @var2;
COMMIT;
END;

如果我对一些值进行硬编码,它就可以工作。但如果我不这样做,那就不会。请看下面:

如果我打电话:

调用 sp_test(2, 'John','test','AAAA');

此处错误:

SELECT t_bid INTO bid FROM generalb WHERE dt=usrdt;

列 t_bid 不能为空

如果我像这样硬编码该值:

SELECT t_bid INTO bid FROM generalb WHERE dt='AAAA';

错误消失。

第二个错误位于以下行:

        SET @var1=bid;
SET @var2=ulon;
EXECUTE stmt USING @var1, @var2;

错误缺少值@var1和@var2。

如果我对 var1 和 var2 进行硬编码,它就会起作用:

        SET @var1=13;
SET @var2=2;
EXECUTE stmt USING @var1, @var2;

我尝试在变量上使用@,但没有使用它。我做错了什么? :(

最佳答案

    delimiter $$
create procedure sp_test
(
ulon int(4)
)
BEGIN
DECLARE bid int(11);
set bid=8888;
...
...
...
...
set @sql=concat('call sp_nextproc_',bid,'(?,?)');
prepare stmt from @sql;
set @var1=bid;
set @var2=ulon;
EXECUTE stmt using @var1,@var2;
END
$$
-- ------------
delimiter $$
CREATE PROCEDURE `sp_nextproc_8888`(
IN bid int(11),
IN ulon int(4)
)
BEGIN
select bid,ulon;
END
$$
<小时/>
-- test with these:
-- call sp_test(9999);
-- call sp_nextproc_8888(111,222);

关于mysql - 是否可以将变量传递给mysql中的存储过程调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855871/

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