2017-04-17 56 views
0
USE COLLEGE; 


DROP PROCEDURE IF EXISTS Fix_Egghead1; 

DELIMITER $$ 

CREATE PROCEDURE Fix_Egghead1() 
BEGIN 
    -- Setup error handing 
    DECLARE errorOccurred INT DEFAULT FALSE; 
    DECLARE errorMessage VARCHAR(255); 

    -- Called when an error occurs 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
    BEGIN 
     SET errorOccurred = TRUE; 
     GET DIAGNOSTICS CONDITION 1 
      errorMessage = MESSAGE_TEXT; 

    END ; 

     START TRANSACTION; 

       DELETE FROM Student 
       WHERE Student.ID= 57; 

      INSERT INTO Faculty(LastName, FirstName, Email, HireDate, Salary, DepartmentID) 
      VALUES('Egghead', 'Eduardo', '[email protected]', 115000, 1); 



     IF errorOccurred = TRUE THEN 
     ROLLBACK; 
     SELECT CONCAT('The faculty member wasn't succesfully added to the Faculty table:' , errorMessage) AS Results; 
    ELSE 
     COMMIT; 
     SELECT 'The faculty member was successfully added to the Faculty table.'; 
    END IF; 

END 
$$ 

DELIMITER ; 

CALL Fix_Egghead1(); 

大家好,爲什麼我的存儲過程內部事務不打印我想要的錯誤消息?

我正在創建中,我創建了兩種輸出是否加入成功或未成功加入到教師表的教員存儲過程的事務回滾,但問題是我的代碼沒有打印出需要打印的錯誤信息。我知道這不是一個成功的交易,因爲教員Eduardo Egghead仍然有一個學生的註冊記錄。我怎麼解決這個問題?但是,我確實想出了一個解決方案,解決方案是擺脫CONCAT函數,只需使用SELECT語句在錯誤消息中寫入,就像我對提交部分所做的那樣。還有其他建議嗎?

+0

難道它甚至與那些錯位的報價編譯? – mustaccio

+0

'''wasn't'''''''''''''''' –

+0

@ mustaccio是的,它的確如此。這不是我的問題。請再次閱讀說明。你認爲你可以幫忙嗎? – User445555

回答

0

自評感動:

我猜測,如果問題不是轉義的報價,那麼它是CONCAT()試圖連接一NULL。如果CONCAT的任何輸入爲NULL,則返回NULL。我建議要麼使用CONCAT_WS()或包裹你的變量在IFNULL()

SELECT CONCAT_WS(' ', "The faculty member wasn't succesfully added to the Faculty table:", errorMessage) AS Results; 
-- or -- 
SELECT CONCAT("The faculty member wasn't succesfully added to the Faculty table: ", IFNULL(errorMessage,'NULL')) AS Results; 
相關問題