2013-11-15 46 views
2

嗨我想創建觸發器,如果​​它的條件滿足,那麼它的身體應該被執行,我想顯示一些消息或任何數據,如果執行觸發體應該顯示。如何在觸發體中顯示結果和/或任何消息?

我想,如果產品的數量少於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

你不能做到這一點,沒有地方給他們輸出在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

+0

現在我也嘗試在觸發器正文廣告中設置用戶定義的變量,然後從外部讀取它。 –

+0

先生,我會設置所有消息到任何新表,然後如何閱讀和顯示該消息?假設管理員看到該消息並添加新的數量,然後雖然消息將顯示,那麼如何管理所有的東西,我很困惑它..任何想法先生關於它? –

+0

是的,使用UDF更困難。如果可能的話 - 嘗試使用簡單的表格,我添加了一個簡短的例子。 – Devart

2

For Quick and plain answer:您無法顯示來自觸發器的消息。你可能只會拋出錯誤。

你有點不知道你在問題中使用觸發器的原因。我們都已經通過了這個級別,所以不用擔心。當我們使用觸發器時,你已經理解了語法,但不知道他們能做什麼,不能做什麼。

觸發器會做有關數據庫,並只(對於你的情況UPDATE)的東西。 這意味着觸發器無法在屏幕上顯示任何消息。你只能處理數據庫的工作人員,並不是所有的行爲都允許這樣做,或者甚至不建議採取一些行動! 這是理論部分。

現在就爲您解決問題。 你可以做的唯一一件事就是知道什麼時候觸發器已經工作(這意味着什麼時候new.qua < 50)或基本上檢查任何其他觸發器是以下內容。 (只是一個小的快速解決方案):

  1. 您需要創建一個表來處理 觸發器的所有日誌記錄。
  2. 在其中添加一個ID字段,一個descr字段,該字段將保存觸發器的動作 。 BefUpdate,BefInsert等 的另一個字段可能觸發日誌記錄和反基因,否則 您希望稍後顯示在應用程序中。
  3. 然後在if條件中,您正在使用寫入並插入 狀態表來填充新(日誌記錄)表中的信息。
  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; 

,甚至從工作臺或從應用程序U可以只:

SELECT * FROM LOGGER 

看測井公司。

但是,如果我從閱讀困惑,你只想拋出異常u能讀了關於引發錯誤MySQL文檔: enter link description here

什麼ü可以做的是在你的,如果條件寫類似:

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

什麼ü應始終NOT DO是改變的同桌,一個觸發分配,並在觸發使用不那麼複雜的代碼只是小部分。

希望我幫了一下。

+0

是的,它可以幫助我很多。非常感謝。..什麼'SIGNAL SQLSTATE'01000'SET MESSAGE_TEXT ='低於50',MYSQL_ERRNO = 1000;'會做什麼?意味着條件滿足時它的行爲是什麼? –

+0

它會在控制檯中拋出一個錯誤,或者如果你在應用程序中捕獲錯誤!這意味着如果你在某個地方檢查錯誤......你會在那裏看到它!你可能會打破你的程序。在Java中,例如你可能會創建一個異常並嘗試捕獲它。那麼你可以在那裏做任何事情。在存儲過程等相同... – ckinfos

+0

好吧,我得到它和thanx很多 –

相關問題