phpmysqlstored-procedureslocalhost

Stored procedure works on local but won't execute on server


I wrote a stored procedure that worked in my local machine but in the server, it wont execute! It would be great to have help

The stored procedure is

DROP PROCEDURE `ASKUS_INSERT`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `ASKUS_INSERT`(
 SENDERCONSUMERID INT(11),
 QUESTION_POSTED TEXT,
 DESCRIPTION_POSTED TEXT,
 NETWORK_ID INT(11),
 COMMTYPEID INT(11),
 CONSUMERID INT(11),
 CATEGORY_ID INT(11),
 ACTIONID INT(11),
 QUESTION_SLUG TEXT
)
BEGIN
     DECLARE LASTINSERTEDID INT DEFAULT 0;
     DECLARE GETTIPSAMOUNT INT DEFAULT 0;
     DECLARE GETTIPSAMOUNTCONSUMER INT DEFAULT 0;
     DECLARE SETTIPSAMOUNTCONSUMER INT DEFAULT 0;
     DECLARE CHECKCOUNTTIPSEXIST INT DEFAULT 0;

     SELECT COUNT(*) INTO CHECKCOUNTTIPSEXIST FROM ACTION_ENTERPRISE_MAPPING WHERE ACTION_ID = ACTIONID;
     IF CHECKCOUNTTIPSEXIST  > 0 THEN
        SELECT SUM(TIP_AMOUNT) INTO GETTIPSAMOUNT FROM ACTION_ENTERPRISE_MAPPING WHERE ACTION_ID = ACTIONID;
     ELSE
         SET GETTIPSAMOUNT  = 0;
     END IF;     


     SELECT CONSUMER_TIPS INTO GETTIPSAMOUNTCONSUMER FROM CONSUMER_PROFILE WHERE CONSUMER_ID = SENDERCONSUMERID;
     SET SETTIPSAMOUNTCONSUMER = GETTIPSAMOUNTCONSUMER + GETTIPSAMOUNT;


     INSERT INTO NETWORK_COMMUNICATIONS (COMMUNICATIONS_ID,SENDER_CONSUMER_ID,NETWORK_COMM_TYPE_ID,PARENT_COMMUNICATIONS_ID,IS_ACTIVE,LAST_MOD_TIME,CONSUMER_ID) VALUES ('',SENDERCONSUMERID,COMMTYPEID,'0','1',NOW(),CONSUMERID);

     SET LASTINSERTEDID = LAST_INSERT_ID();

     UPDATE CONSUMER_PROFILE SET  CONSUMER_TIPS =  SETTIPSAMOUNTCONSUMER  WHERE CONSUMER_ID = SENDERCONSUMERID;
     INSERT INTO CONSUMER_ACTION_LOG (ACTION_LOG_ID,ACTION_ID,CONSUMER_ID,TIPS_AMOUNT,LAST_MOD_TIME,COMMUNICATIONS_ID,COMM_TYPE_ID) VALUES ('',ACTIONID,SENDERCONSUMERID,GETTIPSAMOUNT,NOW(),LASTINSERTEDID,ACTIONID);     


     INSERT INTO NETWORK_COMMUNICATIONS_MESSAGE (NETWORK_COMMUNICATION_MESSAGE_ID,COMMUNICATIONS_ID,SUBJECT,MESSAGE,IS_ACTIVE,LAST_MOD_TIME,QUESTION_SLUG) VALUES ('',LASTINSERTEDID,QUESTION_POSTED,DESCRIPTION_POSTED,'1',NOW(),QUESTION_SLUG);


     INSERT INTO COMMUNICATION_INTEREST_MAPPING (ID,CONSUMER_INTEREST_EXPERT_ID,CONSUMER_ID,COMMUNICATION_ID,IN_NETWORK,LAST_MOD_TIME) VALUES ('',CATEGORY_ID,SENDERCONSUMERID,LASTINSERTEDID,NETWORK_ID,NOW());    

     IF SENDERCONSUMERID != 0 AND CONSUMERID != 0 AND SENDERCONSUMERID != CONSUMERID THEN
     INSERT INTO CONSUMER_NOTIFICATION (CONSUMER_NOTIFICATION_ID,CONSUMER_ID,SENDER_CONSUMER_ID,ACTION_ID,COMMUNICATIONS_ID,IS_ACTIVE,LAST_MOD_TIME) VALUES  ('',CONSUMERID,SENDERCONSUMERID,COMMTYPEID,LASTINSERTEDID,'1',NOW());
     END IF;
END

It says there are many syntax errors and also unknown variables. In that case it should not work in my localhost. But it did! Im confused!


Solution

  • Shouldn't you change the delimiter if this is to work? Now you have ; halfway that may be causing trouble?

    You can check out this manual page for an example that looks like this:

    mysql> delimiter //
    
    mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
        -> BEGIN
        ->   SELECT COUNT(*) INTO param1 FROM t;
        -> END//
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter ;
    

    As you can see, the delimiter is set to "//" first. Your first line implies that you are trying to do something like that anyway. Maybe you just forgot to paste the delimiter lines?

    this:

    DROP PROCEDURE `ASKUS_INSERT`// 
    

    would only work with the delimiter set at '//'. You should (see example) probably end with // as well.