Oracle 数据库 - 触发器在一个 table 中根据在另一个 table 中的插入随机更新和分配
Oracle Database- Trigger to Update and allocate randomly in one table based on insert in other table
我有 3 个数据库 tables:
BOOKING
CREATE TABLE BOOKING
(BOOKING_ID NUMBER,DETAILS VARCHAAR2(1000),
CONSTRAINT BOOKING_PK PRIMARY KEY ("BOOKING_ID"));
ALLOCATION
CREATE TABLE ALLOCATION
(ALLOCATION_ID NUMBER, BOOKING_ID NUMBER, STAFF_ID NUMBER,
CONSTRAINT ALLOCATION_PK PRIMARY KEY ("ALLOCATION_ID"));
STAFF
CREATE TABLE STAFF
(STAFF_ID NUMBER,STAFF_TYPE VARCHAR2(20),
CONSTRAINT STAFF_PK PRIMARY KEY("STAFF_ID"));
因此,无论何时在 ALLOCATION table 中的预订 table 和新 Booking_ID 中有一个新条目,该预订 ID 将分配给一个员工助理(不是经理)随机。
一名员工也可以分配多个预订。
所以,如果有预订 ID 20。
在 ALLOCATION Table: Allocation_id 1(按顺序生成), Booking_id = 20, Staff_id(Staff_id 任何作为助理的员工)
我需要根据上述需求创建一个触发器。
甲骨文 19c
你可以试试下面的触发器 -
CREATE OR REPLACE TRIGGER TRIG_INSERT_BOOKING
AFTER INSERT ON BOOKING
FOR EACH ROW
BEGIN
INSERT INTO ALLOCATION(ALLOCATION_ID, BOOKING_ID, STAFF_ID)
VALUES(YOUR_SEQUENCE.NEXTVAL,
:NEW.BOOKING_ID,
(SELECT STAFF_ID
FROM STAFF
WHERE STAFF_TYPE = 'Assistant'
ORDER BY DBMS_RANDOM.RANDOM
FETCH FIRST ROW ONLY));
END;
/
我有 3 个数据库 tables:
BOOKING
CREATE TABLE BOOKING
(BOOKING_ID NUMBER,DETAILS VARCHAAR2(1000),
CONSTRAINT BOOKING_PK PRIMARY KEY ("BOOKING_ID"));
ALLOCATION
CREATE TABLE ALLOCATION
(ALLOCATION_ID NUMBER, BOOKING_ID NUMBER, STAFF_ID NUMBER,
CONSTRAINT ALLOCATION_PK PRIMARY KEY ("ALLOCATION_ID"));
STAFF
CREATE TABLE STAFF
(STAFF_ID NUMBER,STAFF_TYPE VARCHAR2(20),
CONSTRAINT STAFF_PK PRIMARY KEY("STAFF_ID"));
因此,无论何时在 ALLOCATION table 中的预订 table 和新 Booking_ID 中有一个新条目,该预订 ID 将分配给一个员工助理(不是经理)随机。 一名员工也可以分配多个预订。
所以,如果有预订 ID 20。 在 ALLOCATION Table: Allocation_id 1(按顺序生成), Booking_id = 20, Staff_id(Staff_id 任何作为助理的员工)
我需要根据上述需求创建一个触发器。
甲骨文 19c
你可以试试下面的触发器 -
CREATE OR REPLACE TRIGGER TRIG_INSERT_BOOKING
AFTER INSERT ON BOOKING
FOR EACH ROW
BEGIN
INSERT INTO ALLOCATION(ALLOCATION_ID, BOOKING_ID, STAFF_ID)
VALUES(YOUR_SEQUENCE.NEXTVAL,
:NEW.BOOKING_ID,
(SELECT STAFF_ID
FROM STAFF
WHERE STAFF_TYPE = 'Assistant'
ORDER BY DBMS_RANDOM.RANDOM
FETCH FIRST ROW ONLY));
END;
/