我正在尝试更新库存增加15%的商品的库存价格。下面是我创建表的代码(我已经插入了所有数据):
CREATE TABLE Warehouse
(WarehouseID CHAR(3),
LocationCity VARCHAR2(25) NOT NULL,
LocationState CHAR(3) NOT NULL,
CONSTRAINT Warehouse_WarehouseID_PK PRIMARY KEY (WarehouseID),
CONSTRAINT Warehouse_WarehouseID_CC CHECK (UPPER(WarehouseID) IN ('MEL', 'SYD', 'BNE', 'HBA', 'ADL', 'PER', 'DIA')),
CONSTRAINT Warehouse_LocationState_CC CHECK (UPPER(LocationState) IN ('QLD', 'NSW', 'VIC', 'TAS', 'ACT', 'SA', 'WA', 'NT'))
);
CREATE TABLE Stock
(StockNo CHAR(4),
StockDesc VARCHAR2(50) NOT NULL,
UnitsOnHand NUMERIC DEFAULT 0 NOT NULL,
ItemCategory CHAR(2),
UnitCost NUMERIC(4,2) DEFAULT 0.00 NOT NULL,
ReorderLevel NUMERIC(2) DEFAULT 0 NOT NULL,
CONSTRAINT Category_StockNo_PK PRIMARY KEY (StockNo),
CONSTRAINT Category_ItemCategory_FK FOREIGN KEY (ItemCategory) REFERENCES "CATEGORY"(CategoryID),
CONSTRAINT Category_StockDesc_UK UNIQUE (StockDesc),
CONSTRAINT Category_UnitCost_CC CHECK (UnitCost BETWEEN 0.00 AND 9999.99),
CONSTRAINT Category_ReorderLevel_CC CHECK (ReorderLevel BETWEEN -1 AND 99)
);
以下是将价格更新15%(单独的工作空间)的当前代码:
UPDATE Stock
SET Stock.UnitCost = (Stock.UnitCost * 1.15)
WHERE Warehouse.WarehouseID = 'MEL';
它出现了这个错误:
Error at Command Line : 3 Column : 7 Error report - SQL Error:
ORA-00904: "WAREHOUSE"."WAREHOUSEID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
答案 0 :(得分:3)
目前,您与Stock和Warehouse之间没有任何关系。如果没有已定义的关系,则无法使用另一个表中的条件更新一个表。
如果任何给定的库存物品只存放在一个仓库中,您只需将WarehouseID
添加到STOCK表即可。在这种情况下,您的更新将是:
UPDATE stock s
SET s.UnitCost = (s.UnitCost * 1.15)
WHERE s.WarehouseID = 'MEL'
;
更有可能库存项目可以存放在多个仓库中,在这种情况下,您需要第三个表格。该表将存储每个仓库中的库存量。
create table warehouse_stock (
WarehouseID CHAR(3) not null,
StockNo CHAR(4) not null,
UnitsOnHand NUMERIC DEFAULT 0 NOT NULL,
constraint warehouse_stock_pk primary key (WarehouseID, StockNo),
constraint warehouse_stock_warehouse_fk foreign key (WarehouseID)
references warehouse(warehouseID),
constraint warehouse_stock_stock_fk foreign key (StockNo)
references stock(stockNo)
)
请注意,您需要从STOCK表中删除列UnitsOnHand
,因为它不属于那里。在不同仓库之间分配这些中央库存量是留给读者的练习。
现在您的更新将是:
UPDATE stock s
SET s.UnitCost = (s.UnitCost * 1.15)
WHERE s.stockno in ( select ws.stockno from Warehouse ws
where .ws.WarehouseID = 'MEL')
;