【问题标题】:Set Value to Variable in MySQL Trigger在 MySQL 触发器中将值设置为变量
【发布时间】:2020-01-13 03:34:38
【问题描述】:

我创建一个 MySql 触发器并声明一个变量。那么我有一些if条件。 if 内部不能为 if 之外的声明变量设置值。这是可能的?因为我需要该变量数据到另一个函数。我总是得到空值。

这是我的示例代码 设置查询在执行时获取值

delimiter $$
CREATE TRIGGER Table1INSERTCustomer
    AFTER INSERT ON Table1
    FOR EACH ROW

BEGIN

DECLARE CustomerId integer;

IF (SELECT CustomerID FROM Seller WHERE Id = NEW.ResellerID AND CustomerID IS NOT NULL) 
THEN 
BEGIN

SET @CustomerId := (SELECT CustomerID FROM Seller WHERE Id = NEW.ResellerID LIMIT 1); <-- This is Problem

END; 
END IF;

END; 
$$ 

非常感谢你

【问题讨论】:

  • DECLARE CustomerId integer;SET @CustomerId := 是两个不同的变量。首先是复合语句的局部变量,其次是连接的用户定义变量。 我需要该变量数据到另一个函数将此值存储在某个服务表中。
  • 您好 Akina 感谢您的回复。那么如何将值分配给主要声明的变量?
  • 只需SELECT CustomerID INTO CustomerId FROM Seller WHERE Id = NEW.ResellerID LIMIT 1。但是触发完成后这个变量会被销毁,它的值会丢失。
  • 我做了但同样的问题发生

标签: mysql if-statement triggers null declaration


【解决方案1】:

建模示例。

create table test1 (id int, val int);
insert into test1 values (1,11), (2,22);
select * from test1;
编号 |值 -: | --: 1 | 11 2 | 22
create table test2 (id int, val int);
create trigger tr 
after insert on test2
for each row
select test1.val into @var 
from test1 
where test1.id = NEW.id;
insert into test2 values (1,111);
select * from test1;
编号 |值 -: | --: 1 | 11 2 | 22
select * from test2;
编号 |值 -: | --: 1 | 111
select @var;
| @var | | ---: | | 11 |

db小提琴here

学习。申请。

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 2012-09-29
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多