5

嗨,如果条件满足,我想创建触发器,那么它的主体应该被执行,我想显示一些消息或如果触发器主体执行时应该显示的任何数据。

我希望如果产品数量少于 50,那么它应该显示消息或一些数据。是否可以显示消息?

testdata是表名。

代码 :

delimiter //

create trigger trigger2 before update on test.testdata

for each row 
begin

if new.qty < 50 then

    **display here some message that quantity is less**

end if;

end;

//
delimiter ;
4

3 回答 3

6

你不能这样做,在 MySQL 中没有地方可以输出它们。作为一种变通方法,您可以将消息添加到表中,然后阅读此表。

简短的例子 -

CREATE TABLE table1 (
  column1 VARCHAR(255) DEFAULT NULL
);

CREATE TABLE messages (
  id INT(11) NOT NULL AUTO_INCREMENT,
  message VARCHAR(255) DEFAULT NULL,
  time TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);

DELIMITER $$

CREATE TRIGGER trigger1
    AFTER INSERT
    ON table1
    FOR EACH ROW
BEGIN
  INSERT INTO messages(message) VALUES ('new action');
END
$$

DELIMITER ;

此外,您可以使用 UDF 函数编写您的逻辑。更多信息 -用户定义函数的 CREATE FUNCTION 语法

于 2013-11-15T06:56:36.030 回答
3

对于快速和简单的回答:您不能显示来自触发器的消息。您只能抛出错误。

根据您的问题,您可能不知道您在数据库中使用触发器的原因。我们都通过了那个级别,所以不要担心。当我们使用触发器时,您已经了解了语法,但不了解它们可以做什么以及不能做什么。

触发器将(对于您的情况在UPDATE之前)与数据库有关,仅此而已。这意味着触发器无法在您的屏幕上显示任何消息。您只能处理数据库人员,并且并非所有操作都允许这样做,或者甚至不推荐某些操作!那是理论部分。

现在给你解决你的问题。 您唯一能做的就是知道触发器何时起作用(即当 new.qua<50 时)或基本上检查任何其他触发器的任何内容如下。(只是一个小的快速解决方案):

  1. 您需要创建一个表来处理触发器的所有日志记录。
  2. 在其中添加一个 ID 字段,一个将保存 triggerex 操作的描述字段。BefUpdate、BefInsert 等的另一个字段可能触发了日志记录和其他您希望稍后在应用程序中显示的条件。
  3. 然后在 if 条件中,您使用 write 和 insert 语句来填充新(日志记录)表中的信息。
  4. 稍后在您的应用程序中选择该日志记录表以查看消息。

这是一种有用且快速的记录方式,不仅可以记录触发器,还可以记录函数(存储过程)。Judt 供参考,我为您提供了带有 CREATE 的示例代码,以及您的触发器的 INSERT 语句。

CREATE TABLE LOGGER (
    ID  BIGINT PRIMARY KEY AUTO_INCREMENT,
    DESCR_ACTIVITY VARCHAR(10),
    ACTIVITY VARCHAR(50),
    DT TIMESTAMP,
    CONDITIONVALUE VARCHAR(50)
)

现在在您的代码的 IF 中将其设置为:

if new.qty < 50 then
    INSERT INTO LOGGER VALUES ('BEFINS','CHECKING QUA',NULL,'QUANTITY IS LOWER THAN 50')
end if;

即使从工作台或您的应用程序中,您也可以:

SELECT * FROM LOGGER

查看日志。

但是,如果我对阅读感到困惑并且您只想抛出错误,您可以阅读有关抛出错误的 Mysql 文档: 在此处输入链接描述

你可以做的是在你的 if 条件下写下类似的东西:

if new.qty < 50 then
    SIGNAL SQLSTATE '01000' SET MESSAGE_TEXT = 'Lower than 50', MYSQL_ERRNO = 1000;
endif;

你不应该做是改变分配了触发器的同一张表,并且只使用触发器中不太复杂的代码的一小部分。

希望我能有所帮助。

于 2013-11-15T08:17:07.097 回答
0

此外,您可以使用 select 命令显示任何消息。

IF (NEW.qty < 50) THEN
   SELECT "message that quantity is less" AS Output;
END IF

Place above code inside the trigger. It will print the output

于 2021-02-19T09:20:06.747 回答