有关SQL函数和触发器的帮助 [英] Help on SQL Function and Triggers

查看:62
本文介绍了有关SQL函数和触发器的帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我正在使用PostgreSQL

我有一个名为FLIGHT的表,我编写了一个触发器和一个函数,该函数实际上在更新或在此表中插入记录后会触发一个调用过程的触发器,该过程将查询其他表并在此其他表FLIGHT_STAT中插入记录. />
在FLIGHT_STAT表中,我放置:-
fligth_noaircraft_type_idseat_classqty

对于每个aircraft_type_id,我应该获得3个不同的行,即我所拥有的每种级别的座位(俱乐部,黄金,标准座位)都为1行.

问题是触发触发器时,我仅获得第一行.

Hello, I am using PostgreSQL

I have a table named FLIGHT, I have wrote a trigger and a function that practically after updating or inserting records in this table it fires a trigger that calls a procedure, that will Query other tables and insert records in this other table FLIGHT_STAT.

In the FLIGHT_STAT table I am placing :-
fligth_no, aircraft_type_id, seat_class, qty

Where for each aircraft_type_id I should get 3 different rows, that is 1 row for every class of seats that I have which are club,gold,standard.

The problem is that I am getting only the first row when firing the trigger.

CREATE FUNCTION FLIGHT_STAT() RETURNS TRIGGER AS $FLIGHT_STAT$

DECLARE SEATS INTEGER; 
DECLARE A VARCHAR(3) ;
DECLARE S VARCHAR(10) ;

	
BEGIN
 
	SELECT SEAT_INFO.QTY INTO SEATS
	FROM AIRPLANE 
	JOIN FLIGHT ON FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID 
	JOIN SEAT_INFO ON AIRPLANE.AIRCRAFT_TYPE_ID = SEAT_INFO.TYPE_ID
	WHERE FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO;
  	
	SELECT AIRPLANE.AIRCRAFT_TYPE_ID INTO A
	FROM AIRPLANE
	JOIN FLIGHT ON FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID
	WHERE FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO;
	
	SELECT SEAT_INFO.CLASS_NAME INTO S
	FROM AIRPLANE 
	JOIN FLIGHT ON FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID 
	JOIN SEAT_INFO ON AIRPLANE.AIRCRAFT_TYPE_ID = SEAT_INFO.TYPE_ID
	WHERE FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO;
		
	
	INSERT INTO FLIGHT_STAT(FLIGHT_NO,AIRCRAFT_TYPE_ID,CLASS_TYPE,AVAIL_SEATS)
	VALUES (NEW.FLIGHT_NO, A ,S, SEATS);	


 RETURN NEW;
END;
$FLIGHT_STAT$LANGUAGE plpgsql;

CREATE TRIGGER AVAIL_S AFTER INSERT OR UPDATE ON FLIGHT
    FOR EACH ROW EXECUTE PROCEDURE FLIGHT_STAT();


请提供任何有关如何修改函数以返回所有三行的帮助?


Any help please on how can I modify the function to get all the three rows in return ?

推荐答案

FLIGHT_STAT
FLIGHT_STAT


DECLARE 座位整数; DECLARE A VARCHAR ( 3 ); DECLARE S VARCHAR ( 10 ); 开始 选择 SEAT_INFO.QTY INTO 座位 FROM 飞机 加入 FLIGHT 打开 FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID 加入 SEAT_INFO 打开 AIRPLANE.AIRCRAFT_TYPE_ID = SEAT_INFO. TYPE_ID 位置 FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO; 选择 AIRPLANE.AIRCRAFT_TYPE_ID INTO A FROM 飞机 加入 FLIGHT 打开 FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID 位置 FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO; 选择 SEAT_INFO.CLASS_NAME INTO S FROM 飞机 加入 FLIGHT 打开 FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID 加入 SEAT_INFO 打开 AIRPLANE.AIRCRAFT_TYPE_ID = SEAT_INFO. TYPE_ID 位置 FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO; 插入 INTO FLIGHT_STAT(FLIGHT_NO,AIRCRAFT_TYPE_ID,CLASS_TYPE,AVAIL_SEATS) (NEW.FLIGHT_NO,A,S,SEATS); 返回新功能; END ;
DECLARE SEATS INTEGER; DECLARE A VARCHAR(3) ; DECLARE S VARCHAR(10) ; BEGIN SELECT SEAT_INFO.QTY INTO SEATS FROM AIRPLANE JOIN FLIGHT ON FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID JOIN SEAT_INFO ON AIRPLANE.AIRCRAFT_TYPE_ID = SEAT_INFO.TYPE_ID WHERE FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO; SELECT AIRPLANE.AIRCRAFT_TYPE_ID INTO A FROM AIRPLANE JOIN FLIGHT ON FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID WHERE FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO; SELECT SEAT_INFO.CLASS_NAME INTO S FROM AIRPLANE JOIN FLIGHT ON FLIGHT.AIRPLANE_ID = AIRPLANE.AIRPLANE_ID JOIN SEAT_INFO ON AIRPLANE.AIRCRAFT_TYPE_ID = SEAT_INFO.TYPE_ID WHERE FLIGHT.FLIGHT_NO = NEW.FLIGHT_NO; INSERT INTO FLIGHT_STAT(FLIGHT_NO,AIRCRAFT_TYPE_ID,CLASS_TYPE,AVAIL_SEATS) VALUES (NEW.FLIGHT_NO, A ,S, SEATS); RETURN NEW; END;


FLIGHT_STAT
FLIGHT_STAT


这篇关于有关SQL函数和触发器的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆