sourcecode

이벤트 내에서 IF-Clause 사용

copyscript 2022. 9. 25. 00:17
반응형

이벤트 내에서 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

반응형