phpmyadmin存储过程:插入不起作用

时间:2017-12-30 21:53:01

标签: mysql stored-procedures

我在phpmyadmin中创建了一个过程,当我尝试插入一个新行时,它不起作用。我正在尝试在表“VOTE_TOKEN”中创建一个新行,如果当前日期与表保留中的“LAST_DATE”相同。以下是我的程序的定义:

BEGIN
DECLARE date_container_st varchar(15);
DECLARE date_array varchar(15);
DECLARE date_today varchar(15);
DECLARE date_today_array varchar(15);
SELECT OWNER_ID, LOCATING_ID, LAST_DATE   
FROM RESERVATION                                       
WHERE ID = res_id;

SET date_container_st=RESERVATION.LAST_DATE ;
SET date_today=(CHAR(15), GETDATE(), 101);

IF (date_today=RESERVATION.LAST_DATE)
THEN
       INSERT INTO VOTE_TOKEN(TARGET_ID, VOTING_ID, IS_B_OWNER) 
       VALUES(RESERVATION.OWNER_ID, RESERVATION.LOCATING_ID, 0);                       
       INSERT INTO VOTE_TOKEN(TARGET_ID, VOTING_ID, IS_B_OWNER)
       VALUES(RESERVATION.LOCATING_ID, RESERVATION.OWNER_ID, 1);  
END IF;  END

当我调用此过程时,phpmyadmin只返回一个包含“owner_id”,“locating_id”和“last_date”的小表,并且不会在表“VOTE_TOKEN”中创建任何行

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

问题是您没有将select返回的值提取到变量中,因此您无法使用它们。您的RESERVATION.xxx个变量都不存在。您可以使用select ... into ...语句将查询中的值分配给变量。

...
DECLARE V_OWNER_ID bigint;
DECLARE V_LOCATING_ID bigint;
DECLARE V_LAST_DATE date;

SELECT OWNER_ID, LOCATING_ID, LAST_DATE 
INTO V_OWNER_ID, V_LOCATING_ID, V_LAST_DATE  
FROM RESERVATION                                       
WHERE ID = res_id;
...

使用代码中的变量V_*代替RESERVATION.xxx变量。

此外,您需要使用curdate()功能来获取今天的日期。您正在使用ms sql server版本的代码。

但是,ehole代码可以简化为:

   INSERT INTO VOTE_TOKEN(TARGET_ID, VOTING_ID, IS_B_OWNER) 
   SELECT RESERVATION.OWNER_ID, RESERVATION.LOCATING_ID, 0
   FROM RESERVATION
   WHERE RESERVATION.ID = res_id AND RESERVATION.LAST_DATE=curdate();                       
   INSERT INTO VOTE_TOKEN(TARGET_ID, VOTING_ID, IS_B_OWNER) 
   SELECT RESERVATION.OWNER_ID, RESERVATION.LOCATING_ID, 1
   FROM RESERVATION
   WHERE RESERVATION.ID = res_id AND RESERVATION.LAST_DATE=curdate(); 

不需要变量和if。