Oracle 用于递增日期并插入到另一个表中的触发器
我想在Oracle中创建一个触发器。当更新或插入“我的订单”表中的Oracle 用于递增日期并插入到另一个表中的触发器,oracle,plsql,triggers,dateadd,Oracle,Plsql,Triggers,Dateadd,我想在Oracle中创建一个触发器。当更新或插入“我的订单”表中的dateOrdReceived时,触发器将获取该日期,不管它是什么,并将其更新14天到另一个表productList ordDateDelivery中,使其等于 dateOrdReceived + 14 days = new ordDateDelivery 我确实做了几次尝试,并猜测我需要一个将我的两个表连接起来的查询。我还了解到,也许使用DATEADD可以让我增加14天,但总的来说,我不能完全正确 我的触发尝试 `CREATE
dateOrdReceived
时,触发器将获取该日期,不管它是什么,并将其更新14天到另一个表productList ordDateDelivery中,使其等于
dateOrdReceived + 14 days = new ordDateDelivery
我确实做了几次尝试,并猜测我需要一个将我的两个表连接起来的查询。我还了解到,也许使用DATEADD可以让我增加14天,但总的来说,我不能完全正确
我的触发尝试
`CREATE OR REPLACE TRIGGER "PRODUCTLIST_DATE_DELIVERY"
BEFORE
insert or update on "PRODUCTLIST"
for each row
begin
select p.dateOrdRecieved, o.ordDateDelivery
from productList p JOIN orders o
ON p.ordID = o.ordID;
new.OrdDateDelivery := DATEADD(day,14,new.p.dateOrdRecieved)
end;
/
ALTER TRIGGER "PRODUCTLIST_DELIVERY_DATE" ENABLE
这个触发器的表如下所示
PRODUCTLIST TABLE
CREATE TABLE "PRODUCTLIST"
( "ORDID" NUMBER(3,0) NOT NULL ENABLE,
"PRODUCTID" NUMBER(3,0) NOT NULL ENABLE,
"QUANTITY" NUMBER(4,2) NOT NULL ENABLE,
"ORDDATEDELIVERY" DATE,
"DISCOUNT" NUMBER(3,0),
"TOTALCOST" NUMBER(4,2),
CONSTRAINT "PK_PRODUCTLIST" PRIMARY KEY ("ORDID", "PRODUCTID") ENABLE
)
/
ALTER TABLE "PRODUCTLIST" ADD CONSTRAINT "FK_ORDERS" FOREIGN KEY ("ORDID")
REFERENCES "ORDERS" ("ORDID") ENABLE
/
ALTER TABLE "PRODUCTLIST" ADD CONSTRAINT "FK_PRODUCTS" FOREIGN KEY ("PRODUCTID")
REFERENCES "PRODUCT" ("PRODUCTID") ENABLE
/
ORDERS TABLE
CREATE TABLE "ORDERS"
( "ORDID" NUMBER(3,0) NOT NULL ENABLE,
"DATEORDRECIEVED" DATE,
"CUSID" NUMBER(3,0) NOT NULL ENABLE,
PRIMARY KEY ("ORDID") ENABLE
)
/
ALTER TABLE "ORDERS" ADD CONSTRAINT "FK_CUSTOMER" FOREIGN KEY ("CUSID")
REFERENCES "CUSTOMER" ("CUSID") ENABLE
/
不是Oracle函数。。。甲骨文的总部设在一天左右。如果你给一个日期加1,它会将日期增加一天,将1.5增加36小时,以此类推
现在,你的扳机
无法自动更新记录或将记录插入另一个表。触发器“在”一个表上,这意味着您需要创建DML以便将其添加或更新到该表中
update productlist
set dateOrdRecieved = :new.OrdDateDelivery + 14
where ordid = :new.ordid
:new.
此处引用触发器所在表的新数据。这是一个你可以访问的特定“变量”,而不是你试图实现的一般概念。您不能使用它直接将数据分配给其他表,尽管您可以使用它作为这样做的一种手段
下一步你需要考虑触发器的位置。无论何时更改订单
,您都希望更新产品列表
,这意味着触发器需要位于表订单
上
create or replace trigger productlist_date_delivery
before insert or update on orders
for each row
begin
update productlist
set OrdDateDelivery = :new.dateOrdRecieved + 14
where ordid = :new.ordid;
end;
/
请注意您自己的一些额外差异:
:new.
而不是new.
update productlist
set dateOrdRecieved = :new.OrdDateDelivery + 14
where ordid = :new.ordid
:new.
此处引用触发器所在表的新数据。这是一个你可以访问的特定“变量”,而不是你试图实现的一般概念。您不能使用它直接将数据分配给其他表,尽管您可以使用它作为这样做的一种手段
下一步你需要考虑触发器的位置。无论何时更改订单
,您都希望更新产品列表
,这意味着触发器需要位于表订单
上
create or replace trigger productlist_date_delivery
before insert or update on orders
for each row
begin
update productlist
set OrdDateDelivery = :new.dateOrdRecieved + 14
where ordid = :new.ordid;
end;
/
请注意您自己的一些额外差异:
:new.
而不是new.
update productlist
set dateOrdRecieved = :new.OrdDateDelivery + 14
where ordid = :new.ordid
:new.
此处引用触发器所在表的新数据。这是一个你可以访问的特定“变量”,而不是你试图实现的一般概念。您不能使用它直接将数据分配给其他表,尽管您可以使用它作为这样做的一种手段
下一步你需要考虑触发器的位置。无论何时更改订单
,您都希望更新产品列表
,这意味着触发器需要位于表订单
上
create or replace trigger productlist_date_delivery
before insert or update on orders
for each row
begin
update productlist
set OrdDateDelivery = :new.dateOrdRecieved + 14
where ordid = :new.ordid;
end;
/
请注意您自己的一些额外差异:
:new.
而不是new.
update productlist
set dateOrdRecieved = :new.OrdDateDelivery + 14
where ordid = :new.ordid
:new.
此处引用触发器所在表的新数据。这是一个特定的“变量”,你可以访问它,而不是一个普通的co