【发布时间】:2016-04-27 21:23:10
【问题描述】:
我需要帮助来创建视图,然后触发以下操作:在输入每个发票行项目时更新销售人员佣金(销售额的 10%)、库存数量和客户余额。 p>
这就是我现在的视图:
CREATE OR REPLACE VIEW NEW_INVOICE_LINE_ITEM
AS
SELECT COMMISSION, INV_QUANTITY, CUSTOMER_BALANCE
FROM SALESPERSON, INVENTORY, CUSTOMER;
这就是我的触发器:
CREATE OR REPLACE TRIGGER UPDATE_COMMISSION
AFTER INSERT ON INVOICE_LINE_ITEM FOR EACH ROW
BEGIN
UPDATE SALESPERSON
SET COMMISSION = (SALE_PRICE * QUANTITY_SOLD) *.10
WHERE :NEW.COMMISSION = SALESPERSON.COMMISSION;
END;
我不断收到错误:错误的绑定变量“new.commission”
这是我的数据库架构如下:
DROP TABLE PO_LINE_ITEM;
DROP TABLE PURCHASE_ORDER;
DROP TABLE VENDOR;
DROP TABLE INVOICE_LINE_ITEM;
DROP TABLE INVENTORY;
DROP TABLE INVOICE;
DROP TABLE SALESPERSON;
DROP TABLE CUSTOMER;
CREATE TABLE CUSTOMER
(CUSTOMER_ID DECIMAL(2,0) PRIMARY KEY,
CUSTOMER_NAME CHAR(25),
CUSTOMER_ADDRESS CHAR(15),
CUSTOMER_ZIPCODE DECIMAL(5,0),
CUSTOMER_CITY CHAR(15),
CUSTOMER_STATE CHAR(2),
CUSTOMER_BALANCE DECIMAL(4,2)
);
CREATE TABLE SALESPERSON
(SALESPERSON_ID DECIMAL(3,0) PRIMARY KEY,
SALESPERSON_NAME CHAR(25),
COMMISSION DECIMAL(5,2)
);
CREATE TABLE INVOICE
(INVOICE_ID DECIMAL(3,0),
CUSTOMER_ID DECIMAL(2,0),
SALESPERSON_ID DECIMAL(3,0),
ITEM_NUM DECIMAL(4,0),
INVOICE_DATE DATE,
PRIMARY KEY (CUSTOMER_ID, SALESPERSON_ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMER,
FOREIGN KEY (SALESPERSON_ID) REFERENCES SALESPERSON
);
CREATE TABLE INVENTORY
(INV_NUM DECIMAL(4,0) PRIMARY KEY,
DESCRIPTION CHAR(10),
INV_QUANTITY DECIMAL(4,0),
INV_PRICE DECIMAL(7,2),
INV_COST DECIMAL(7,2),
INVOICE_ID DECIMAL(3,0),
ITEM_NUM DECIMAL(4,0),
FOREIGN KEY (INVOICE_ID, ITEM_NUM) REFERENCES INVOICE
);
CREATE TABLE INVOICE_LINE_ITEM
(QUANTITY_SOLD DECIMAL(4,0),
SALE_PRICE DECIMAL(7,2),
INVOICE_ID DECIMAL(3,0),
INV_NUM DECIMAL(4,0),
ITEM_NUM DECIMAL(4,0),
PRIMARY KEY (INVOICE_ID, INV_NUM, ITEM_NUM),
FOREIGN KEY (INVOICE_ID, ITEM_NUM) REFERENCES INVOICE,
FOREIGN KEY (INV_NUM) REFERENCES INVENTORY
);
CREATE TABLE VENDOR
(VENDOR_ID DECIMAL(2,0) PRIMARY KEY,
VENDOR_NAME CHAR(25),
CITY CHAR(15),
STATE CHAR(2),
VENDOR_BALANCE DECIMAL(4,2)
);
CREATE TABLE PURCHASE_ORDER
(PURCHASE_ORDER_ID DECIMAL(2,0) PRIMARY KEY,
BALANCE DECIMAL(4,2),
SHIPMENT CHAR(10),
PURCHASE_ORDER_DATE DATE,
VENDER_ID DECIMAL (2,0),
FOREIGN KEY (VENDER_ID) REFERENCES VENDOR
);
CREATE TABLE PO_LINE_ITEM
(PO_DATE DATE,
PO_BALANCE DECIMAL(4,0),
ITEM_NUM DECIMAL(4,0),
INV_QUANTITY DECIMAL(4,0),
INV_NUM DECIMAL(4,0),
PURCHASE_ORDER_ID DECIMAL(2,0),
PRIMARY KEY (INV_NUM, PURCHASE_ORDER_ID),
FOREIGN KEY (INV_NUM) REFERENCES INVENTORY,
FOREIGN KEY (PURCHASE_ORDER_ID) REFERENCES PURCHASE_ORDER);
提前致谢!
【问题讨论】:
-
您使用的是哪个客户端?当您使用错误的方法运行代码时,SQL Developer 有时会这样做,但我不记得它是哪种方式。如果您使用“运行语句”,请尝试“运行脚本”,反之亦然。如果这无助于将两个表的结构添加到问题中。视图的相关性是什么,为什么它没有任何连接条件(或者,实际上,正确的连接)?
-
invoice_line_item没有commission列...您应该从父发票中找到销售人员吗?您是替换他们当前的佣金,还是增加佣金? -
我只是评论说这是对触发器的错误使用。这应该在申请程序中。更不用说它看起来非常有问题的事实。仔细考虑一下 WHERE 条件。您正在更新当前佣金 = 计算值的每个销售员的佣金。我怀疑那是你的
-
是的,我想从父发票表中查找销售人员并替换当前的佣金。我是否需要在
invoice_line_item中添加一个佣金列