如何在触发器体中显示结果和/或任何消息?

时间:2013-11-15 06:48:30

标签: mysql database triggers

嗨我想创建触发器,如果​​它的条件满足则应该执行它的主体并且我想显示一些消息或者如果执行触发器主体应该显示的任何数据。

我希望如果产品数量少于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 ;

3 个答案:

答案 0 :(得分:4)

你不能这样做,没有地方可以在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 Syntax for User-Defined Functions

答案 1 :(得分:2)

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

根据您的问题,您可能不知道您在数据库中使用触发器的原因。我们都已经通过这个级别,所以不要担心。你已经理解了我们使用触发器的语法,但没有理解他们可以做什么和不做什么。

触发器会针对数据库执行(对于您的情况 BEFORE UPDATE ),而且只会执行此操作。 这意味着触发器无法在屏幕上显示任何消息。您只能处理数据库人员,并且不允许执行所有操作,甚至不推荐某些操作! 那是理论部分。

现在为您解决问题。 你可以做的唯一事情就是知道触发器何时起作用(这意味着当new.qua <50)或基本上用任何其他触发器检查任何东西时如下。 (只是一个小的快速解决方案):

  1. 您需要创建一个表来处理所有日志记录 触发器。
  2. 在其中添加一个ID字段,一个将保存其动作的descr字段 triggerex。 BefUpdate,BefInsert等另一个领域 可能是引发日志记录和其他情况的条件 你希望稍后在应用程序中显示。
  3. 然后在if条件中你正在使用write和insert statemement用于填充新(日志)表中的信息。
  4. 在您的应用中稍后选择该日志记录表以查看消息。
  5. 这是一种有用且快速的记录方式,不仅包括触发器,还包括函数(存储过程)。 请参考我给出的带有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文档: enter link description here

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

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

    你应该总是 NOT DO 改变分配触发器的同一个表,并在触发器中只使用一小部分不那么复杂的代码。

    希望我帮了一下。

答案 2 :(得分:0)

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

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

将上面的代码放在触发器中。它将打印输出