Он не распознает таблицы, которые я создал выше процедуры, и он говорит: unknown table "tourstats"
в списке полей. Таблица tourstats не содержит данных преднамеренно, потому что я вставляю данные с вызовом процедуры, и когда я выполняю вызов процедуры, она говорит: unknown table "tourstats"
в списке полей, а также то же самое для таблицы "participates"
.Процедура MySQL не распознает таблицы
Моя цель - написать процедуру, согласно которой ее ввод tour_id
. Если этот tour_id
находится в таблице tourstats
в столбце tourID
, я либо удаляю его, либо обновляю, а если нет, то вставляю его. Эти 3 последних действия выполняются с использованием 3 триггеров, вызывающих процедуру, но это легкая часть.
Вот мой код:
CREATE DATABASE IF NOT EXISTS TourDB;
USE TourDB;
CREATE TABLE if not exists PARTICIPATE (
CID SMALLINT NOT NULL,
TOURID VARCHAR(5) NOT NULL,
PAYMENT DECIMAL(9 , 2) NOT NULL,
PRIMARY KEY (CID , TOURID),
CHECK (PAYMENT > 0),
FOREIGN KEY (CID)
REFERENCES CUSTOMERS (CID)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (TourID)
REFERENCES TOURS (TourID)
ON DELETE RESTRICT ON UPDATE CASCADE
);
LOAD DATA LOCAL INFILE 'C:\\.........\\participate.csv'
INTO TABLE participate
COLUMNS TERMINATED BY ';'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
CREATE TABLE TourStats (
tourID VARCHAR(5) NOT NULL,
numCustomers INT NOT NULL,
revenue DECIMAL(9 , 2) NOT NULL,
PRIMARY KEY (tourID),
FOREIGN KEY (tourID)
REFERENCES Tours (tourID)
ON DELETE CASCADE ON UPDATE CASCADE
);
#PROCEDURE
delimiter //
create procedure UpdateTourStats (IN tour_id varchar(10))
begin
if (tour_id) in (tourstats.tourID) and (tour_id) = (participate.TOURID) then
#update
begin
update TourStats
set tourID = tour_id, numCustomers = count(participate.CID), revenue = sum(participate.PAYMENT);
end;
#insert
elseif (tour_id) not in (tourstats.tourID) and (tour_id) = (participate.TOURID) then
begin
insert into TourStats
values (tourid, count(participate.CID), sum(participate.PAYMENT));
end;
#delete
else
begin
delete from tourstats
where tourstats.tourID = tour_id;
end;
end if;
end//
delimiter ;
call UpdateTourStats ('tour2');
Это в MySQL или MS SQL Server? – CGritton
это сервер MySQL –
'tourstats! = TourStats': http://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html –