Oracle 数据库 练习题 T7
来源:互联网 发布:js仿ios日期选择器 编辑:程序博客网 时间:2024/06/11 09:51
1.创建用户kaifa(密码亦为kaifa), 并分配connect,create table,resource权限。
2.
在做报表统计时,需要根据报表日期和币种从概要表中查询本期余额。
概要表(CCB_GYB)信息如下:
ACCOUNTING_DATE
DATE
报表日期(唯一索引)
RMB_YTD_BALANCE
NUMBER
人民币余额
CNY_YTD_BALANCE
NUMBER
本位币余额
USD_YTD_BALANCE
NUMBER
外币折美元余额
其中币种代码如下:
--RMB 人民币
--CNY 本位币
--USD 外币折美元
如果币种为RMB,则取出人民币余额作为本期余额;为CNY,则取本位币余额;为USD
则取外币折美元余额。
请编写一个函数GetCurrBal(
qrp_rq IN VARCHAR2, --报表日期
qrp_code IN VARCHAR2 --币种
)
实现此功能,并能在sqlplus里调用。
其中建表语句如下:
create table CCB_GYB
(
ACCOUNTING_DATE DATE,
RMB_YTD_BALANCE NUMBER,
CNY_YTD_BALANCE NUMBER,
USD_YTD_BALANCE NUMBER
);
创建索引:create unique index CCB_GYB_IDXon CCB_GYB (ACCOUNTING_DATE);
3.
假设有张学生成绩表(CJ)如下
[姓名] [学科] [成绩]
张三 语文 80
张三 数学 86
张三 英语 75
李四 语文 78
李四 数学 85
李四 英语 78
现有需求如下:
(1)要求统计分数段的人数。显示结果为:
[成绩] [人数]
0<成绩<60 0
60<成绩<80 0
80<成绩<100 5
(2)要求根据姓名,把各科成绩显示在一条记录里。显示结果如下:
姓名 语文 数学 英语 总成绩
---------- ---------- ---------- ---------- ----------
李四 78 85 78 241
张三 80 86 75 241
总分 158 171 153 482
使用SQL语句或存储过程(显示结果时可用dbms_output打印出来)实现这两个功能。
4.
某一客户表包含如下信息:
INDIVIDUALID
客户ID
VARCHAR2(20)(唯一键)
BIRTHDATE
出生日期
Date
GENDER
性别
VARCHAR2(10)
SALARY
月收入
NUMBER(10,2)
CERT-TYPE
证件类型
VARCHAR2(10)
CERT-NO
证件号码
VARCHAR2(20)
CREATED-TS
进入系统的时间
TIMESTAMP
现要把该表数据导出成文件,导出的内容格式如下:
属性列
列长度
备注
INDIVIDUALID
20
BIRTHDATE
8
格式为:yyyymmdd
GENDER
10
SALARY
13
CERT-TYPE
10
CERT-NO
20
CREATED-TS
17
格式为:yyyymmddhh24missff3
要求每个字段列的内容长度是固定的,不足部分由空格补齐,字符串左对齐(右补空格),数字右对齐。如果列的内容为null,需先进行处理,字符串默认为空格,数字默认为0,日期默认为99991231,时间戳默认为99991231000000000。
请编写程序实现该导出功能。
创建表脚本:
create table tb1010(
INDIVIDUALID VARCHAR2(20),
BIRTHDATE date,
GENDER VARCHAR2(10),
SALARY NUMBER(10,2),
CERT_TYPE VARCHAR2(10),
CERT_NO VARCHAR2(20),
CREATED_TS TIMESTAMP
);
5.
某语音电话本表信息如下:
Call_book_info
MOBILE_ID
移动号码
VARCHAR2(12)
CALLIN_TIME
呼入时间
Date
CALLOUT_TIME
呼出时间
Date
STATUS
状态
CHAR(1)
在某次大批量操作后,数据记录达到100万,MOBILE_ID估计有2万个重复,现要求删除重复的号码(只保留一条),因为该表是业务表,删除时不能影响业务的正常使用。编写存储过程实现删除重复号码的功能。
要求如下:
为保证删除的数据以后可查,在删除时要先做备份,备份不成功则不能进行删除。
要有日志记录,比如删除所花时间,删除成功了多少条,失败多少条等操作信息。
create table CCB_GYB( ACCOUNTING_DATE DATE, RMB_YTD_BALANCE NUMBER, CNY_YTD_BALANCE NUMBER, USD_YTD_BALANCE NUMBER);create unique index CCB_GYB_IDX on CCB_GYB (ACCOUNTING_DATE);-------------------------------------------------------------------------------------2.----------------------------create or replace function GetCurrBal(qrp_rq IN VARCHAR2,qrp_code IN VARCHAR2)return numberis Result number;begin if qrp_code='RMB' then begin select RMB_YTD_BALANCE INTO Result FROM CCB_GYB WHERE ACCOUNTING_DATE=TO_DATE(qrp_rq,'yyyy-mm-dd'); end; elsif qrp_code='CNY' then begin select CNY_YTD_BALANCE INTO Result FROM CCB_GYB WHERE ACCOUNTING_DATE=TO_DATE(qrp_rq,'yyyy-mm-dd'); end; elsif qrp_code='USD' then begin select USD_YTD_BALANCE INTO Result FROM CCB_GYB WHERE ACCOUNTING_DATE=TO_DATE(qrp_rq,'yyyy-mm-dd'); end; end if; return(Result); end GetCurrBal;----测试declare v number;begin v:=getCurrBal('2017-07-27','RMB'); dbms_output.put_line(v);end;3.---------------------------------------------(1)要求统计分数段的人数。显示结果为:[成绩] [人数]0<成绩<60 0 60<成绩<80 0 80<成绩<100 5create table CJ( Cname varchar2(20), Csubject varchar2(20), Cgrade number);insert into cj values ('张三','语文','80');insert into cj values ('张三','数学','86');insert into cj values ('张三','英语','75');insert into cj values ('李四','语文','78');insert into cj values ('李四','数学','85');insert into cj values ('李四','英语','78');select '0<成绩<60' as Cgrade ,count(*) from cj where Cgrade<60union allselect '60<成绩<80' as Cgrade ,count(*) from cj where Cgrade>=60 and Cgrade<80union allselect '80<成绩' as Cgrade ,count(*) from cj where Cgrade>=80;select Cname, sum(decode(Csubject,'语文',Cgrade,0)) as 语文,--"DECODE" 条件取值 sum(decode(Csubject,'数学',Cgrade,0)) as 数学,--IF 条件=值1 RETURN(翻译值1) ELSIF 条件=值2 ELSE RETURN(缺省值) sum(decode(Csubject,'英语',Cgrade,0)) as 英语, sum(Cgrade) as 总成绩 from cj group by Cnameunion allselect '总分' 总分, sum(decode(Csubject,'语文',Cgrade,0)) as 语文, sum(decode(Csubject,'数学',Cgrade,0)) as 数学, sum(decode(Csubject,'英语',Cgrade,0)) as 英语, sum(Cgrade) as 总成绩 from cj;----------------------------4.---------------------------------------5create table call_book_info( moble_id varchar2(12), callin_time date, callout_time date, status char(1))insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('123124125212',sysdate,sysdate,'1');insert into call_book_info values('12345678987',sysdate,sysdate,'0');insert into call_book_info values('12345678987',sysdate,sysdate,'0');insert into call_book_info values('12345678987',sysdate,sysdate,'0');insert into call_book_info values('12345678987',sysdate,sysdate,'0');insert into call_book_info values('12345678987',sysdate,sysdate,'0');insert into call_book_info values('12345678987',sysdate,sysdate,'0');insert into call_book_info values('12345678987',sysdate,sysdate,'0');create or replace procedure delete_call_bookis create_sql varchar2(1000):= 'create table temp as select * from call_book_info'; issuccess number; begintime number; endtime number; sumcount number; shengcount number; zuicount number;begin --execute immediate 'drop table temp'; execute immediate create_sql; commit; select count(*) into issuccess from user_tables; select count(*) into sumcount from call_book_info; select count(*) into zuicount from (select min(rowid) from call_book_info group by moble_id); if issuccess>0 then begintime:=dbms_utility.get_time(); dbms_output.put_line(begintime); delete call_book_info where rowid not in(select min(rowid) from call_book_info group by moble_id); endtime:=dbms_utility.get_time(); dbms_output.put_line(endtime); dbms_output.put_line(endtime-begintime); select count(*) into shengcount from call_book_info; dbms_output.put_line('成功删除:'||(sumcount-shengcount)); dbms_output.put_line('不成功:'||(shengcount-zuicount)); else dbms_output.put_line('没有备份成功'); end if;end;begin delete_call_book;end;
- Oracle 数据库 练习题 T7
- Oracle数据库面试练习题
- Oracle数据库面试练习题
- oracle 数据库 练习题2
- oracle 数据库 练习题 3
- oracle 数据库 练习题4
- Oracle 数据库 练习题5
- Oracle 数据库 练习题6
- Oracle 数据库 练习题 T8
- 【雪野实训记录】Oracle数据库 T7作业——子程序和程序包
- oracle数据库经典练习题及答案
- 史上最难oracle数据库练习题(附答案)
- oracle 练习题
- Oracle练习题
- oracle练习题
- Oracle练习题
- oracle 练习题
- oracle练习题
- JAVA 堆栈 堆 方法区 静态区 final static 内存分配 详解
- 点、线导出含高程值的表格
- javascript高级程序设计(变量、作用域和内存问题)
- 对象参数的简单应用,理解对象传参
- 简单工厂模式
- Oracle 数据库 练习题 T7
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- Maven build 引用类,无法找到引用类
- 图片加载类ImageLoader原理总结
- VC(win32)通过进程名杀死进程
- 浅谈SQLServer行列转换UNPIVOT函数的使用
- centos下 使用phpstorm+xdebug 远程调试代码
- 寻找数组对角线相关
- vs bool true(205)