프로 시저 위에 생성 한 테이블을 인식하지 못하고 필드 목록에 unknown table "tourstats"
이라고 표시됩니다. 테이블 tourstats에는 프로 시저 호출로 데이터를 삽입하고 프로 시저 호출을 실행할 때 의도적으로 데이터가 들어 있지 않습니다. 필드 목록에 unknown table "tourstats"
과 테이블 "participates"
에 대해서도 동일합니다.MySQL 프로 시저가 테이블을 인식하지 못합니다
제 목표는 입력이 tour_id
인 절차를 작성하는 것입니다. 이 tour_id
이 테이블 tourstats
의 열 tourID
에 있으면 삭제하거나 업데이트하고 그렇지 않으면 삽입합니다. 이 3 가지 마지막 작업은 프로 시저를 호출하는 3 개의 트리거를 사용하여 수행되지만 쉬운 부분입니다. 난 그냥 첫 번째 IF
절은 문제가 될 수있는 것으로 나타났습니다
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 –