반응형
이벤트 내에서 IF-Clause 사용
MariaDB를 사용하여 기본적인 공항 관리 시스템 SQL 데이터베이스를 모델링하고 있습니다.정확히 30분 후에 비행기가 출발할 때마다 테이블에 메시지를 추가하는 이벤트 "LastCall"을 만들고 싶습니다.
지금까지 코드를 작성했습니다.
CREATE TABLE LastCall(
TS TIMESTAMP,
Message Varchar(100));
DELIMITER $
CREATE EVENT LastCallInsert
ON SCHEDULE EVERY 1 second
DO
BEGIN
INSERT INTO LastCall(TS, Message)
SELECT
CURRENT_TIMESTAMP,
CONCAT("Last call for passengers on flight ",FLIGHT.Flight_ID,". Go to gate ",FLIGHT.GateID)
FROM FLIGHT
WHERE TIMEDIFF(FLIGHT.Expected_Time,CURRENT_TIMESTAMP) = "00:30:00" AND FLIGHT.Depart_Arrives = "Departure";
END; $
DELIMITER ;
그리고 이것은 표입니다 비행:
CREATE TABLE Flight(
Flight_ID varchar(4) not null,
Depart_Arrives enum('Departure','Arrival'),
AirportID varchar(3),
AircraftREG varchar(6) not null,
Expected_Time datetime,
GateID varchar(3),
PRIMARY KEY(Flight_ID,Depart_Arrives),
FOREIGN KEY(AirportID) REFERENCES Airport(AirportID),
FOREIGN KEY(AircraftREG) REFERENCES Aircraft(AircraftREG),
FOREIGN KEY(GateID) REFERENCES Gate(GateID)
);
에러 코드가 표시됩니다.
에러 코드: 1054.알 수 없는 열 '예상됨'필드 리스트의 시간
왜 Expected_Time에 대한 제 언급을 이해하지 못하는지에 대한 의견이 있으십니까?
사실 네가 해야 할 필요가 있다.SELECT
에서FLIGHT
항공편이 조건을 충족하는지 확인하기 위해 표를 작성했습니다.IF
스테이트먼트가 기능하지 않습니다.
내 생각에 너는 이 모든 것을INSERT ... SELECT
대신 스테이트먼트:
BEGIN
INSERT INTO LastCall (ts, message)
SELECT
CURRENT_TIMESTAMP,
CONCAT("Last call for passengers on flight ", FlightID, ". Go to gate ", GateID)
FROM Flight
WHERE
Expected_Time >= NOW() - INTERVAL 30 MINUTE
AND Expected_Time < NOW() - INTERVAL 29 MINUTE;
END;
그SELECT
의 항공편을 검색하다expected_time
지금부터 정확히 30분 후입니다.정확한 일치가 아닌 범위 체크가 필요할 수 있습니다.now()
seconds가 있습니다).행이 발견되면 해당 정보가 대상 테이블에 삽입됩니다.
언급URL : https://stackoverflow.com/questions/60981065/using-an-if-clause-inside-an-event
반응형
'sourcecode' 카테고리의 다른 글
유형 개체 'datetime.datetime'에 특성 'datetime'이 없습니다. (0) | 2022.09.25 |
---|---|
Javascript에서 CSS를 추가하려면 어떻게 해야 하나요? (0) | 2022.09.25 |
jQuery를 사용하여 특정 항목으로 스크롤하려면 어떻게 해야 합니까? (0) | 2022.09.25 |
Quasar 부트 파일에서 스토어 액세스 (0) | 2022.09.25 |
MySQL 8의 REGEXP_REPLACE 문제 (0) | 2022.09.25 |