Oracle题目
1. 创建一个函数fun_sal,该函数根据部门号获得该部门下所有员工的平均工资
Create or replace function fun_sal(deptnos number)
return varchar2
Is
Avgs number(10);
Begin
Select avg(sal) into Avgs from scott.emp where deptno=deptnos;
Return Avgs;
End;
2.创建一个动态游标,根据部门编号查询该部门下员工所有信息。
declare
cursor emp_cursor(deptnos number)
is
select * from scott.emp where deptno=deptnos;
v_temp emp_cursor%rowtype;
begin
if not emp_cursor%isopen then
Open emp_cursor(&deptno);
end if;
loop
fetch emp_cursor into v_temp;
exit when emp_cursor%notfound;
dbms_output.put_line('编号是:'||v_temp.empno||'姓名是:'||v_temp.ename||'工资是:'||v_temp.sal);
end loop;
close emp_cursor;
end;
3 创建一个存储过程,根据该员工的编号,查询该员工的工资,如果该工资少于2000.把工资提高到2000.
create or replace procedure proc_sal(empnos number)
is
sals number(10);
begin
select sal into sals from scott.emp where empno=empnos;
if sals<2000 then
update scott.emp set sal=2000 where empno=empnos;
end if;
end;
4 显示在一个月为30天的情况所有员工的日薪金,忽略余数
Select sal+nvl(comm,0) from emp
第二部分
第一阶段:创建用户和基础表
1. 创建用户developer密码developer,为其赋予足够的权限,然后用该用户完成下面功能。
create user developer identified by developer;
grant connect,resource to developer;
2. 创建数据表
--客户信息表
--(会员编号、会员姓名、会员密码、邮箱地址、注册时间)
create table customer
(
cId number(20) primary key,
cName varchar2(20),
cPwd varchar2(20),
email varchar2(20),
cTime date
);
--商品信息表
--(商品id,商品名字、价格、折扣、是否新品、现存量)
create table goodsInfo
(
gId number(20) primary key,
gName varchar2(20),
price number(5,2),
zc number(1,1),
isNew number(10),
total number(20)
);
--订单信息表
--(订单id、会员id、订单状态(0未付款、1已付款、2已审核、3完成)、下单时间)
create table orderInfo
(
oId int primary key,
cId number(20) references customer(cId),
isStage number(10),
endTime date
);
--订单明细信息表
--(订单id、商品id、商品数量)
create table orderd
(
oId references orderInfo(oId),
gId references goodsInfo(gId),
goodsnum number(30)
);
要求:
1. 会员姓名唯一
create unique index names on customer(cName);
2. 商品折扣介于0.0-10.0之间
alter table goodsInfo
add
constraint zc check(zc>=0.0 and zc<=10.0);
3. 订单明细表中订单id和商品id唯一
create unique index weiyi on orderd(oId,gId);
4. 订单id由系统自动生成,请使用序列完成
create sequence xu start with 1 increment by 1 ;
insert into customer values(1,'离宿舍','123','edf@aa.com',to_date('2014-1-2','yyyy-MM-dd'));
insert into orderInfo values(xu.nextval,1,1,to_date('2014-4-2','yyyy-MM-dd'));
5. 外键关系1:订单信息表(会员id)-客户信息表(会员编号)
6. 外键关系2:订单明细表(订单id)-订单信息表(订单id)
7. 外键关系3:订单明细表(商品id)-客户信息表(商品id)
第三阶段:数据录入与查询
向每张表添加3条以上的数据
--客户信息表
--(会员编号、会员姓名、会员密码、邮箱地址、注册时间)
insert into customer values(1,'离宿舍','123','edf@aa.com',to_date('2014-1-2','yyyy-MM-dd'));
insert into customer values(2,'王五','123','edf@aa.com',to_date('2014-2-2','yyyy-MM-dd'));
insert into customer values(3,'李四','123','edf@aa.com',to_date('2014-3-2','yyyy-MM-dd'));
insert into customer values(4,'流量','123','edf@aa.com',to_date('2014-4-2','yyyy-MM-dd'));
insert into customer values(5,'士大夫','123','edf@aa.com',to_date('2014-3-4','yyyy-MM-dd'));
商品id,商品名字、价格、折扣、是否新品、现存量
insert into goodsInfo values(1,'鞋子',45.50,0.9,1,50);
insert into goodsInfo values(2,'帽子',35.50,0.8,1,500);
insert into goodsInfo values(3,'衣服',45.50,0.9,1,150);
insert into goodsInfo values(4,'裤子',100.50,0.5,1,100);
insert into goodsInfo values(5,'袜子',45.50,0.7,1,500);
--订单信息表
--(订单id、会员id、订单状态(0未付款、1已付款、2已审核、3完成)、下单时间)
insert into orderInfo values(xu.nextval,1,1,to_date('2014-4-2','yyyy-MM-dd'));
insert into orderInfo values(xu.nextval,1,1,to_date('2014-4-2','yyyy-MM-dd'));
insert into orderInfo values(xu.nextval,1,1,to_date('2014-4-2','yyyy-MM-dd'));
insert into orderInfo values(xu.nextval,1,1,to_date('2014-4-2','yyyy-MM-dd'));
insert into orderInfo values(xu.nextval,1,1,to_date('2014-4-2','yyyy-MM-dd'));
insert into orderInfo values(xu.nextval,2,1,to_date('2014-4-2','yyyy-MM-dd'));
--订单明细信息表
--(订单id、商品id、商品数量)
insert into orderd values(2,1,2);
insert into orderd values(3,2,2);
insert into orderd values(4,5,1);
insert into orderd values(5,3,2);
insert into orderd values(6,4,2);
insert into orderd values(7,2,1);
insert into orderd values(7,3,5);
1. 查询订单信息:订单编号、订单状态(显示中文状态)、下单时间、订单总金额
select o.oId, case isStage
when 0 then '未付款'
when 1 then '已付款'
when 2 then '已审核'
when 3 then '完成' end ,endTime,sum(price*zc*goodsnum) from orderInfo o inner join orderd o1 on o.oId=o1.oId inner join goodsInfo g on g.gId =o1.gId
group by o.oId,o.isstage,o.endtime;
2. 查询商品信息:商品编号、商品名称、商品价格、折扣价
select gId,gName,price,zc*price from goodsInfo;
3. 查询订单明细:订单编号、下单时间、商品名称、商品价格、购买数量
select o.oId,endTime,gName,price,goodsnum from orderInfo o inner join orderd o1 on o.oId=o1.oId inner join goodsInfo g on g.gId =o1.gId ;
4. 查询消费金额排在前5名的顾客信息:会员id、会员姓名、邮箱、注册时间
select c.cId,cName,email,cTime from
(select rownum,o.cId, o.oId,isStage,endTime,price*zc*goodsnum prices from orderInfo o inner join orderd o1 on o.oId=o1.oId inner join goodsInfo g on g.gId =o1.gId order by prices desc ) temp
inner join customer c on c.cId=temp.cId and (rownum>=0 and rownum<=5) ;
5. 查询销量最大的商品信息:商品id、商品名称、销售数量
select rownum,goodsInfo.* from
(
select g.gId,g.gname,sum(o1.goodsnum) from orderd o1 inner join goodsInfo g on o1.gid=g.gid group by g.gid,g.gname order by sum(goodsnum) desc) temp where rownum=1;
)
第四阶段:视图、存储过程、函数
1. 创建视图view_OrderDetail:订单编号、订单状态、订单总金额、下单日期、会员id、会员姓名、会员邮箱。通过视图进行数据查询。
create or replace view view_OrderDetail
as
select o.oId, case isStage
when 0 then '未付款'
when 1 then '已付款'
end case ,endTime, (select sum(goodsnum * (select price * zc from goodsInfo where gid=o1.gId)) "TotalMoney" from orderd o1 where oid = o.oid) as "TotalMoney"
from order o
inner join customer c on c.cid = o.cid;
2. 创建存储过程pro_InsertProduct:
输入参数:商品名字、价格、折扣、是否新品、现存量
输出参数:商品id
create or replace procedure pro_InsertProduct
(
sname varchar2,
price number,
zc number,
isnew number,
total number,
sIds out number
)
is
begin
sIds :=xu.nextval;
insert into goodsInfo values(xu.nextval,sname,price,zc,isnew,total);
end;*/
测试:调用存储过程新增一条商品信息。
declare
sids number;
begin
pro_InsertProduct('sdf',565,0.2,0,56,sids);
dbms_output.put_line('ID号是:'||sids);
end;
3. 创建函数func_getCustomerCostMoney:该函数通过会员编号计算该会员总的消费金额。
参数:会员编号
返回值:该会员总的消费金额
create or replace function func_getCustomerCostMoney
(
id number
)
return number
is
v_money number(9,3);
begin
select sum(price*zc*goodsnum) prices into v_money from goodsInfo g inner join orderd o1 on g.gid =o1.gid where o1.oid in
(select oid from orderInfo o inner join customer c on id=o.cid);
return v_money;
end;
测试:查询所有会员的消费情况:会员编号、会员姓名、注册时间、邮箱、消费金额。
select cId,cName,endtime,email,func_getCustomerCostMoney(cId) totals from customer;
第五阶段:触发器、包
? 新添加一张日志记录表。每次对商品信息进行删除操作时,需要将被删除的商品信息记录到该日志记录表中。要求:使用触发器完成该功能。
create table rizi
(
gId number(20) primary key,
gName varchar2(20),
price number(5,2),
zc number(1,1),
isNew number(10),
total number(20)
);
create or replace trigger tiger_name
after delete on goodsInfo for each row
begin
insert into rizi values(:old.gId,:old.gName,:old.price,:old.zc,:old.isNew,:old.total);
end;
? 新创建一个包pack_order。该包内包括:
1. 函数:func_getOrderMoney。该函数根据订单id计算该订单的总金额
参数:订单id
返回值:订单总金额
/*create or replace package pack_order
is
function func_getOrderMoney(dId number) return number;
end;
*/
create or replace package body pack_order
is
function func_getOrderMoney(dId number) return number
is
v_total number(5,2);
begin
select sum(price*zc*goodsnum) prices into v_total from goodsInfo g inner join orderd o1 on g.gid =o1.gid where o1.oid=dId;
return v_total;
end;
end;
测试:查询订单:订单编号、订单状态(显示中文状态)、下单时间、订单总金额
2. 函数:func_getSaleProductCount。该函数能够根据商品id计算其销售数量。
参数:商品id
返回值:销售数量
create or replace function func_getSaleProductCount(ids number)
return number
is
v_snum number(10);
begin
select sum(goodsnum) s into v_snum from orderd o where o.gid=ids;
return v_snum;
end;
测试:查询销量前10名的商品信息,并按销售数量倒序排列。
商品id、商品名称、商品价格、销量
Oracle题目的更多相关文章
- 7.29实习培训日志-Oracle题目
总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...
- oracle-Oracle试题
ylbtech-doc:oracle-Oracle试题 oracle-Oracle试题 1.A,返回顶部 01.{Oracle题目}你判断下面语句,有什么作用?(选择1项) GRANT upd ...
- Portswigger web security academy:SQL injection
Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...
- oracle面试题目总结
阿里巴巴公司DBA笔试题 http://searchdatabase.techtarget.com.cn/tips/2/2535002.shtml 注:以下题目,可根据自己情况挑选题目作答,不必 ...
- Oracle语法 及 SQL题目(一)
目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...
- Oracle语法 及 SQL题目(三)
目录 SQL题目六 第一个问题思路(查询酒类商品的总点击量) 第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列) 第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序 ...
- Oracle sql 复习题目总结
sql 题目一 表结构 1.表名:g_cardapply 字段(字段名/类型/长度): apply_no varchar8; //申请单号(关键字) apply_date date; //申请日期 s ...
- 数据库面试题目- ORACLE
Posted on 2009-06-08 17:38 漠北的天空 阅读(110) 评论(0) 编辑 收藏 1. 列举几种表连接方式 Answer:等连接(内连接).非等连接.自连接.外连 ...
- ORACLE数据库部分面试题目
1. 解释冷备份和热备份的不同点以及各自的优点 解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份.而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库.热备份的优点在于当备份 ...
随机推荐
- 处理畅捷通的T+ 12.0版,web服务无故自动停止的问题
用了几个月的畅捷通T+ 12.0版,一直都挺正常,但最近这两周,出现了好几次web服务自动停止的情况,今天抽空仔细看了Windows的日志,发现在半夜2点左右,TPlusProWebService12 ...
- git秘钥配置--转
git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置.github的ssh配置如下:一 .设置git的user name和email:$ git con ...
- 3D数学 ---- 矩阵和线性变换[转载]
http://blog.sina.com.cn/s/blog_536e0eaa0100jn7c.html 一般来说,方阵能描述任意线性变换.线性变换保留了直线和平行线,但原点没有移动.线性变换保留直线 ...
- MemcacheQ 安装与使用
MemcacheQ 是一个基于 MemcacheDB 的消息队列服务器.官网地址:http://memcachedb.org/memcacheq/ 特点: 1.简单易用. 2.处理速度快. 3.可创建 ...
- jquery判断复选框checkbox是否被选中
jquery判断复选框checkbox是否被选中 使用is方法 //如果选中返回true //如果未选中返回false .is(':checked');
- sublime plugin emmet toolkit
[简写规则]1. E 代表HTML标签.2. E#id 代表id属性.3. E.class 代表class属性.4. E[attr=foo] 代表某一个特定属性.5. E{foo} 代表标签包含的内容 ...
- Redis 新特性---pipeline(管道)
转载自http://weipengfei.blog.51cto.com/1511707/1215042 Redis本身是一个cs模式的tcp server, client可以通过一个socket连续发 ...
- Django学习笔记(一)
1.$python manage.py runserver 0.0.0.0:8000 开放所有IP $python manage.py runserver 8000 制定开放的端口 2.报错信息: ...
- iOS开发--一些UITabBarItem属性的设置[转]
1.改变UITabBarItem 字体颜色 [[UITabBarItemappearance]setTitleTextAttributes:[NSDictionary dictionaryWithOb ...
- I2C控制器的Verilog建模之三(完结版)
前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口 ...