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

0 mysql sql oracle date oracle-apex

问:创建一个视图,调用TITLE_NOTRETURNED以显示尚未返回的媒体的电影标题和 media_id。视图不应允许任何数据操作语言操作。

我需要创建作为附加问题的视图,但它返回我缺少表达式的错误。

租借历史表:租借日期、归还日期

媒体表:媒体ID、格式

电影表:标题 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() )
);
Run Code Online (Sandbox Code Playgroud)

另外,我之前尝试过将rental_history r更改为rentaldate r,但它也不起作用。

ERD:

在此处输入图片说明

Wil*_*son 5

如果这是 Oracle,它会给出ORA-00936: missing expression因为

select convert(date, getdate())
Run Code Online (Sandbox Code Playgroud)

缺少一个from条款。

一旦你解决了这个问题,convert用于字符集,而不是日期,date是用于引入日期文字的关键字,例如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;
Run Code Online (Sandbox Code Playgroud)

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