2016-09-22 46 views
0

我正在尋找一個通過存儲過程操作的表。 我有2個程序可以選擇和更新。第一個執行完美,但最後一個有問題。它絕對感覺像MySQL解析器問題。我希望我能在這裏找到一些幫助,因爲一個項目即將到期。一旦第二個sp運行,無論是通過SP還是隻是基本查詢,每個後續更新語句都會失敗,直到我刪除該記錄;然後我可以再次插入然後通過基本查詢調用進行更新。我需要使用SP,因爲我正在與運行NodeJS的Web服務器進行通信。我正在使用node-mysql包。我正在使用mysql-5.7。錯誤代碼:1109字段列表中的未知表'CONSUMER'

第二SP錯誤:錯誤代碼1109未知表中的字段列表 '消費者'

感謝, timecatcher

表模式

CREATE TABLE IF NOT EXISTS CONSUMER (
     signUpVerified BIT(1), 
     signUpTimeStamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
     loggedIn BIT(1), 
     loginTimeStamp TIMESTAMP NOT NULL, 
     consumerName VARCHAR(100), 
     consumerEmail VARCHAR(254) UNIQUE NOT NULL, 
     consumerPassword VARCHAR(20) NOT NULL, 
     consumerAddress VARCHAR(100), 
     consumerMapLocation VARCHAR(50), 
     consumerMobileNumber VARCHAR(20) UNIQUE NOT NULL, 
     consumerBalance FLOAT, 
     lastSessionID BINARY(32), 
     consumerID INT(30) UNIQUE AUTO_INCREMENT NOT NULL, 
     PRIMARY KEY(consumerID) 
    ); 

FIRST SP

CREATE DEFINER=`root`@`%` PROCEDURE `CONSUMER_SIGN_UP_VERIFICATION`(IN lastSessionID BINARY(32), IN consumerEmail VARCHAR(254)) 
    BEGIN 
     IF ((consumerEmail IS NULL) OR (lastSessionID IS NULL)) THEN 
      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "EMAIL ADDRESS & SESSION ID REQUIRED"; 
     END IF; 
     IF (EXISTS(SELECT * FROM CONSUMER WHERE (CONSUMER.consumerEmail = consumerEmail) AND (CONSUMER.signUpVerified = b'0'))) THEN 
      IF ((SELECT CONSUMER.signUpTimeStamp FROM CONSUMER WHERE CONSUMER.consumerEmail = consumerEmail) = CHECK_SESSION_ID(lastSessionID, CONCAT("SANTEX", consumerEmail))) THEN 
       UPDATE CONSUMER SET CONSUMER.signUpVerified = b'1' WHERE CONSUMER.consumerEmail = consumerEmail; 
      ELSE 
       DELETE FROM CONSUMER WHERE CONSUMER.consumerEmail = consumerEmail; 
       SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "THIS SIGN UP VERIFICATION EMAIL SETUP HAS BEEN TAMPERED WITH, SO PLEASE START A NEW ACCOUNT"; 
      END IF; 
     ELSE 
      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "THIS ACCOUNT IS ALREADY REGISTERED OR THERE IS NO ACCOUNT REGISTERED WITH THIS EMAIL ADDRESS"; 
     END IF; 
    END 

SECOND SP

CREATE DEFINER=`root`@`%` PROCEDURE `CONSUMER_LOGIN`(IN consumerEmail VARCHAR(254), IN consumerPassword VARCHAR(20), OUT lastSessionID BINARY(32)) 
    BEGIN 
     IF (EXISTS(SELECT * FROM CONSUMER WHERE (CONSUMER.consumerEmail = consumerEmail) AND (CONSUMER.signUpVerified = b'1'))) THEN 
      IF (EXISTS(SELECT * FROM CONSUMER WHERE (CONSUMER.consumerEmail = consumerEmail) AND (CONSUMER.consumerPassword = consumerPassword))) THEN 
       SELECT @consumerID := CONSUMER.consumerID FROM CONSUMER NATURAL JOIN CONSUMER_SESSION WHERE (CONSUMER.consumerEmail = consumerEmail) AND (CONSUMER.consumerPassword = consumerPassword) AND ((CONSUMER.loggedIn = b'1') OR ((CONSUMER_SESSION.loginTimeStamp != CONSUMER_SESSION.logoutTimeStamp) AND (CONSUMER_SESSION.logoutTimeStamp IS NULL))); 
       IF (@consumerID IS NULL) THEN 
        SET @loginTimeStamp := NOW(); 
        SET lastSessionID = CREATE_SESSION_ID(@loginTimeStamp, CONCAT("SANTEX", consumerEmail)); 
        UPDATE CONSUMER SET CONSUMER.loggedIn = b'1', CONSUMER.lastSessionID = lastSessionID WHERE (CONSUMER.consumerEmail = consumerEmail) AND (CONSUMER.consumerPassword = consumerPassword); 
        INSERT INTO CONSUMER_SESSION(CONSUMER_SESSION.consumerID, CONSUMER_SESSION.loginTimeStamp, CONSUMER_SESSION.sessionID, CONSUMER_SESSION.logoutTimeStamp) VALUES(@consumerID, @loginTimeStamp, lastSessionID, NULL); 
       ELSE 
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "THIS ACCOUNT HAS NOT LOGGED OUT FROM ITS PREVIOUS SESSION OR REQUESTED A PASSWORD RESET. PLEASE TRY AGAIN LATER"; 
       END IF; 
      ELSE 
       SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "INCORRECT EMAIL ADDRESS OR PASSWORD"; 
      END IF; 
     ELSE 
      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "THERE IS NO ACCOUNT REGISTERED WITH THIS EMAIL ADDRESS OR SIGN UP VERIFICATION PENDING"; 
     END IF; 
    END 
+0

你是否在表中存在的同一個DB中創建過程? – Rahul

+0

是的。 。選擇工作正常,但第二個SP上的更新呼叫導致錯誤;那麼它將不會讓我更新查詢,直到我刪除該行。 – timecatcher

+0

奇怪的是,第一個SP進行類似的調用,但沒有問題;就像我之前提到的那樣,它可能是mysql解析器問題。 – timecatcher

回答

0

我很抱歉。我的觸發器文件是1500行代碼。通過調用CONSUMER.loggedIn,我在觸發器中犯了一個錯誤。謝謝你的時間

相關問題