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题目的更多相关文章

  1. 7.29实习培训日志-Oracle题目

    总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...

  2. oracle-Oracle试题

    ylbtech-doc:oracle-Oracle试题 oracle-Oracle试题 1.A,返回顶部 01.{Oracle题目}你判断下面语句,有什么作用?(选择1项)     GRANT upd ...

  3. Portswigger web security academy:SQL injection

    Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...

  4. oracle面试题目总结

    阿里巴巴公司DBA笔试题  http://searchdatabase.techtarget.com.cn/tips/2/2535002.shtml   注:以下题目,可根据自己情况挑选题目作答,不必 ...

  5. Oracle语法 及 SQL题目(一)

    目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...

  6. Oracle语法 及 SQL题目(三)

    目录 SQL题目六 第一个问题思路(查询酒类商品的总点击量) 第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列) 第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序 ...

  7. Oracle sql 复习题目总结

    sql 题目一 表结构 1.表名:g_cardapply 字段(字段名/类型/长度): apply_no varchar8; //申请单号(关键字) apply_date date; //申请日期 s ...

  8. 数据库面试题目- ORACLE

    Posted on 2009-06-08 17:38 漠北的天空 阅读(110) 评论(0)  编辑 收藏 1.       列举几种表连接方式 Answer:等连接(内连接).非等连接.自连接.外连 ...

  9. ORACLE数据库部分面试题目

    1. 解释冷备份和热备份的不同点以及各自的优点 解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份.而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库.热备份的优点在于当备份 ...

随机推荐

  1. [solr] - 环境搭建

    这里忽略java安装和tomcat安装,这里使用的是solr-4.10.0 1.到apache下载solr,地址: http://mirrors.hust.edu.cn/apache/lucene/s ...

  2. 2013年第四届蓝桥杯C/C++程序设计本科B组决赛

    1.猜灯谜(枚举) 2.连续奇数和(等差数列) 3.空白格式化(去除空格) 4.高僧斗法(阶梯nim) 5.格子刷油漆(dp) 6.农场阳光 1.猜灯谜 A 村的元宵节灯会上有一迷题:请猜谜 * 请猜 ...

  3. JNI环境搭建,CDT, cygwin,NDK

    1.为eclipse增加c和c++的开发插件 下载地址:http://www.eclipse.org/cdt/downloads.php 2,安装cygwin Ndk需要运行在linux环境下,cyg ...

  4. 移动设备页面高度不足时min-height 的尴尬处理

    移动设备页面高度不足时min-height 的尴尬处理 在做html5的页面时,经常遇到页面内容太少撑不起来整个手机屏幕的高度. 我们经常使用min-height来处理,比如min-height:56 ...

  5. Thinkphp源码分析系列(二)–引导类

    在上一章我们说到,ThinkPHP.php在设置完框架所需要的变量和调教好环境后,在最后调用了  Think\Think::start();  即Think命名空间中的Think类的静态方法start ...

  6. ubuntu 13.04 lighttped mysql php

    apt-get update sudo apt-get install lighttpd php5-cgi Enable the fastcgi module and the php configur ...

  7. 【转】操作权限不够?教你开启Win7管理员帐户

    在Win7中进行一些设置,或修改某些文件时,经常会弹出当前帐户没有操作权限的提示,即使已经是管理员账户也不行.事实上,出于安全方面的考虑,默认情况下Win7系统的系统管理员Administrator账 ...

  8. NHibernate系列文章十五:NHibernate组件

    摘要 前面文章介绍了NHibernate对简单.net数据类型的映射对照表.NHibernate也可以映射复杂数据类型,这里介绍通过组件映射NHibernate值对象. 1. NHibernate引用 ...

  9. Easyui修改样式

    背景:公司一个后台管理系统做的网站,构架采用Asp.net MVC4.0 + EasyUI, 请了美工做了切图,结果发现美工不懂Easyui,切图的风格又都是直角风格. 而Easyui默认风格是圆角. ...

  10. 各种数据库分页sql

    1.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>= ...