创建视图并且不应允许任何数据操作语言操作

Create a view and should not allow any data manipulation language operations

问:创建一个名为 TITLE_NOTRETURNED 的视图来显示电影标题和 media_id 的媒体尚未 return 编辑。视图不应允许任何数据操作语言操作。

我需要创建视图作为附加问题,但 return 错误是我缺少表达式。

租赁历史table: 出租日期,return日期

媒体table: 媒体 ID、格式

电影table: 标题id,标题

我的代码:

CREATE VIEW TITLE_NOTRETURNED AS
SELECT mov.title, m.mediaid, r.rentaldate
FROM Movies mov, Media m, rental_history r
WHERE mov.titleid = m.titleid
AND m.mediaid = r.mediaid
AND r.returndate > (SELECT CONVERT(DATE, getdate() )
);

另外,我之前试过把rental_history r改成rentaldate r,但是也不行。

ERD:

如果这是 Oracle,它给出 ORA-00936: 缺少表达式 因为

select convert(date, getdate())

缺少 from 子句。

一旦你解决了这个问题,convert is for character sets, not dates, date is a keyword for introducing a date literal 比如 date '2020-12-23',并且没有 getdate() 函数(除非你自己写了一个)。

固定版本(包括防止 DML 的要求)为:

create or replace view title_not_returned as
select mov.title, m.mediaid, r.rentaldate
from   movies mov
       join media m on m.titleid = mov.titleid
       join rental_history r on r.mediaid = m.mediaid
where  r.returndate > trunc(sysdate)
with read only;

顺便问一下,租赁 return 日期是如何填充的?如果它们默认为某个遥远的未来日期,例如 9999 年 12 月 31 日,然后在 returned 时更新为实际日期,这将起作用(但也许应该在视图中使用特殊日期)。如果它们开始时为空,表示尚未 returned,您将不会得到任何结果。