繁体   English   中英

缺少正确的偏析,表达式丢失,子查询错误

[英]missing right parantjesis, missing expression, error on subquery

我的数据库用于包含音乐CD和磁带的出租中心。

    create table cds (
    id_cd varchar2(5) pk_cduri primary key,
    artists varchar2(100) not null,
    genre varchar2(20) not null,
    release date not null,
    constraint pk_cds primary key(id_cd)
    );


    create table replenishment(
    id_ap varchar2(5) constraint pk_aprovizionari primary key,
    id_cd varchar2(5),
    quantity_cd number(5,2) default 0,
    price_cd number(5,2) default 0,
    id_cv varchar2(5), 
    cquantity_cv number(5,2) default 0, 
    price_cv number(5,2) default 0,
    data_rep date default sysdate, 
    total_cost as (quantity_cd* price_cd+ quantity_cv* price_cv),
    constraint fk_ap_cd foreign key (id_cd) references  cds,
    constraint fk_ap_cv foreign key (id_cv) references  videotapes
    );

当id_cust ='c1'的客户借用id_cd ='cd1'的cd时,则bor_cd = 1,而当客户'c1'返回'cd1'时,我必须在ret_cd中插入值1。

    create table bor_ret (
    id int constraint pk_bor_ret primary key,
    id_cust varchar2(5) not null, 
    id_cd varchar2(5),
    bor_cd int default 0,
    ret_cd int default 0,
    id_cv varchar2(5),
    bor_cv int default 0,
    ret_cv int default 0,
    data date default sysdate,
    constraint fk_cd_imp foreign key (id_cd) references cds(id_cd),
    constraint fk_cv_imp foreign key (id_cv) references videotapes(id_cv),
    constraint fk_ab_imp  foreign key (id_cust) references customers,
    constraint ck_imp_cd_value_flag check (bor_cd in (1,0)), 
    constraint ck_imp_cv_value_flag check (bor_cv in (1,0)),
    constraint ck_ret_cd_value_flag check (ret_cd in (1,0)),
    constraint ck_ret_cv_value_flag check (ret_cv in (1,0))
    );

我必须创建一个触发器(我不知道如何定义它,但是如果有人知道,我会问一个新问题以接受它的答案) ,每次在ret_cd中插入值1后, 都会设置bor_cd = 0:

update bor_ret set bor_cd=0 where id_cust=(select id_cust from bor_ret where ret_cd=1);

然后,我必须向CDS添加一个计算列,以计算最后插入的cd的数量:具有id_cd = cd1的CDS的“ cd1”的数量等于BOR_RET提供的id_cd = cd1的数量。

因此,我想运行以下命令:

alter table cds add quantity as(
 select quantity_cd from replenishment b inner join cds a on a.id_cd=b.id_cd where b.id_cd=
 (select id_cd from cds where rownum=1 order by id_cd desc) -
 (select count(id_cd) from bor_ret d inner join cds c on c.id_cd=d.id_cd where d.id_cd=
 (select id_cd from cds where rownum=1 order by id_cd desc) and d.bor_cd=1));

我得到这个错误:“ 缺少表达 ”。 如果我只运行查询:选择quantity_cd ...,我得到的错误是:“ 错误在第2行:ORA-00907:缺少右括号

或者,更好的是,如何添加此列作为以下内容的区别:

    select quantity_cd from replenishment where id_cd=(select max(id_cd) from cds) as A

    select count(id_cd) from bor_ret where id_cd=(select max(id_cd) from cds) and bor_cd=1 as B

quantity = A-B;

该线程用于解决计算列的问题,但是如果有人也可以向我解释如何创建触发器,我将为其打开一个新线程。

预先谢谢你们。

请在最后一行中注意第二个右括号,但请注意一行。

select quantity_cd 
from replenishment b 
inner join cds a on a.id_cd=b.id_cd 
where b.id_cd=
           (select id_cd from cds where rownum=1 order by id_cd desc) - 
           (select count(id_cd) from bor_ret d inner join cds c on c.id_cd=d.id_cd where d.id_cd= (select id_cd from cds where rownum=1 order by id_cd desc)) /* <------ ===*/
    and d.bor_cd=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM