我在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”中创建任何行
感谢您的帮助
答案 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。