首页 > 解决方案 > Oracle:视图内的函数

问题描述

我正在尝试建立一个酒店管理系统。每次客户预订房间时,都会在 TAKEN 中插入一行,其中包含takenid、和。然后客户在该房间内使用的每个产品都会在表格中插入一行以供以后计费。最后,当客户结帐时,会将一行插入到具有前一行的表中,用于计算客户必须通过视图支付的总金额。我要创建的视图包括像这样的列customeridroomidstartdaySALEBILLtakenidendday

房间号roomidROOM表格中查找),

startday(在 TAKEN 表中),endday(在BILL表中),

员工employid姓名(在EMPLOYEE表中查找),

totalproductprice(通过基于 计算 SALE 表中销售的所有产品takenid),

总计(必须支付的总金额)

这使得该视图的复杂性超出了我的 SQL 连接表的能力,因此我决定使用函数将值作为这些列返回,就像在 MySQL 中一样。我想知道是否有办法在 Oracle 中做到这一点?

这是我的数据库的样子

标签: sqloracle

解决方案


您可以按如下方式创建视图:

CREATE OR REPLACE VIEW VW_HOTEL_MANAGEMENT AS
SELECT R.roomno, t.startday,e.name,
       (SELECT SUM(AMOUNT) FROM SALE 
       WHERE TAKENID = T.TAKENID 
       GROUP BY TAKENID) TOTALPRODUCTPRICE,
       ((SELECT TRUNC(B.ENDDAY - T.STARTDAY)*RT.PRICE 
         FROM BILL B, ROOMTYPE RT, ROOM R 
         WHERE r.type = rt.type 
         AND r.roomid = b.billid 
         AND b.takenid = T.TAKENID 
         AND B.EMPLOYID = E.EMPLOYID)
       +  (SELECT SUM(AMOUNT) FROM SALE 
           WHERE TAKENID = T.TAKENID 
           GROUP BY TAKENID)) TOTAL
FROM ROOM R, TAKEN T, EMPLOYEES E
WHERE t.roomid = r.roomid;

推荐阅读