首页 > 解决方案 > Oracle 数据库 - 根据在另一张表中的插入触发在一张表中随机更新和分配

问题描述

我有 3 个数据库表:

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"));

因此,每当 BOOKING 表中有一个带有新 Booking_ID 的新条目时,在 ALLOCATION 表中,该预订 id 将被随机分配一个助理(而非经理)的员工。一名员工也可以分配多个预订。

因此,如果有一个 Booking ID 20。在 ALLOCATION 表中:Allocation_id 1(通过序列生成),Booking_id = 20,Staff_id(任何作为助理的员工的Staff_id)

我需要根据上述要求创建一个触发器。

甲骨文 19c

标签: oracletriggers

解决方案


您可以尝试以下触发器 -

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;
/

演示。


推荐阅读