2个表格如下:
CREATE TABLE Part( /* Part description */
PNumber NUMBER(10) NOT NULL, /* Number */
PName VARCHAR(30) NOT NULL, /* Name */
PManufacturer VARCHAR(255) NOT NULL, /* Manufacturer */
PPrice NUMBER(7,2) NOT NULL, /* Price */
PRating VARCHAR(10) NULL, /* Rating */
CONSTRAINT Part_pkey PRIMARY KEY( PNumber ),
CONSTRAINT Part_fkey1 FOREIGN KEY( PRating )
REFERENCES LRatings( Rating )
);
CREATE TABLE OrderLine( /* Ordered parts */
LOrder NUMBER(10) NOT NULL, /* Order number */
LLine NUMBER(3) NOT NULL, /* Line number */
LPart NUMBER(10) NOT NULL, /* Part number */
LQuantity NUMBER(6) NOT NULL, /* Quantity */
CONSTRAINT OrderLine_pkey PRIMARY KEY( LOrder, LLine ),
CONSTRAINT OrderLine_fkey1 FOREIGN KEY( LPart )
REFERENCES Part( PNumber ),
CONSTRAINT OrderLine_fkey2 FOREIGN KEY( LOrder )
REFERENCES Orders( ONumber )
);
需求:更新PRating,当LQuantity等于0时,为NULL;小于等于100并且大于0时,为RARE;小于等于1000并大于100时,为NORMAL;其他情况为FREQUENT。
我本来想用:Update Part SET PRating = NULL WHERE~~~~~~~~~,因为我想在一句话内完成以上要求,大哥们,怎么才能在UPDATE里完成这个分支语句呢?
CREATE TABLE Part( /* Part description */
PNumber NUMBER(10) NOT NULL, /* Number */
PName VARCHAR(30) NOT NULL, /* Name */
PManufacturer VARCHAR(255) NOT NULL, /* Manufacturer */
PPrice NUMBER(7,2) NOT NULL, /* Price */
PRating VARCHAR(10) NULL, /* Rating */
CONSTRAINT Part_pkey PRIMARY KEY( PNumber ),
CONSTRAINT Part_fkey1 FOREIGN KEY( PRating )
REFERENCES LRatings( Rating )
);
CREATE TABLE OrderLine( /* Ordered parts */
LOrder NUMBER(10) NOT NULL, /* Order number */
LLine NUMBER(3) NOT NULL, /* Line number */
LPart NUMBER(10) NOT NULL, /* Part number */
LQuantity NUMBER(6) NOT NULL, /* Quantity */
CONSTRAINT OrderLine_pkey PRIMARY KEY( LOrder, LLine ),
CONSTRAINT OrderLine_fkey1 FOREIGN KEY( LPart )
REFERENCES Part( PNumber ),
CONSTRAINT OrderLine_fkey2 FOREIGN KEY( LOrder )
REFERENCES Orders( ONumber )
);
需求:更新PRating,当LQuantity等于0时,为NULL;小于等于100并且大于0时,为RARE;小于等于1000并大于100时,为NORMAL;其他情况为FREQUENT。
我本来想用:Update Part SET PRating = NULL WHERE~~~~~~~~~,因为我想在一句话内完成以上要求,大哥们,怎么才能在UPDATE里完成这个分支语句呢?
解决方案 »
- oracle =ALL的问题
- 谁给帮忙改下这个SQL语句。
- 9i用Enterprise Manager Console导出数据库出现"ora-00972 标识过长"问题,求救!
- oracle 10g 的OCI目录下 找不到samples目录
- 急求透明网关内存占用!!!!!
- MSSQL 到oracle 间数据怎么迁移速度快点
- Oracle新手想问诸位是如何学习并实践Oracle的?
- 求书!!!!帮帮我吧
- 如何实现oracle数据库信息的实时更新?
- ORACLE 9i for AIX问题:我的listener不能启动
- 如何使用pl/sql 给一个oracle数据库中的表的字段建索引?
- 我有一些sql脚本,怎样才能放到我的oracle sever运行起来呢
---------- ----------
0
100
1000
2000SQL> select * from OrderLine; LORDER LLINE LPART LQUANTITY
---------- ---------- ---------- ----------
0 0 0 0
100 100 100 100
1000 10 1000 1000
2000 10 2000 2000
SQL> update part set prating=(
2 select case when a.LQUANTITY=0 then null
3 when a.LQUANTITY<=100 then 'rare'
4 when a.LQUANTITY<=1000 then 'normal'
5 else 'frequent'
6 end
7 from OrderLine a where a.LPart=part.pnumber);已更新4行。
SQL> select pnumber,prating from part; PNUMBER PRATING
---------- ----------
0
100 rare
1000 normal
2000 frequentSQL>
2 select case when a.LQUANTITY=0 then null
3 when a.LQUANTITY <=100 then 'rare'
4 when a.LQUANTITY <=1000 then 'normal'
5 else 'frequent'
6 end
7 from OrderLine a where a.LPart=part.pnumber);
ORA-01427: single-row subquery returns more than one row