当前位置:文档之家› oracle-存储过程练习题

oracle-存储过程练习题

1.创建用户kaifa(密码亦为kaifa),并分配connect,create table,resource权限。

CREATE user KAIFA IDENTIFIED BY KAIFA DEFAULT TABLESPACE HOSDATA TEMPOARY TABLESPACE TEMPDATA;GRANT CONNECT , CREATE TABLE , RESOURCE TO KAIFA2.在做报表统计时,需要根据报表日期和币种从概要表中查询本期余额。

概要表(CCB_GYB)信息如下:--RMB 人民币--CNY 本位币--USD 外币折美元如果币种为RMB,则取出人民币余额作为本期余额;为CNY,则取本位币余额;为USD 则取外币折美元余额。

请编写一个函数GetCurrBal(qrp_rq IN VARCHAR2, --报表日期qrp_code IN VARCHAR2--币种)CREATE OR REPLACE FUNCTION GetCurrBal(Vqrp_rq Date , --报表日期Vqrp_code VARCHAR2--币种)RETURN NUMBERISVAMOUNT NUMBER ;VDATE Date;BEGINSELECT ACCOUNTING_DATE INTO VDATE FROM CCB_GYBWhere ACCOUNTING_DATE = Vqrp_rq;IF Vqrp_code = 'RMB'THENSELECT RMB_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code= 'RMB'AND ACCOUNTING_DATE= VDATE;ELSEIF Vqrp_code = 'CNY'THENSELECT CNY_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code= 'CNY';ELSESELECT USD_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code= 'USD';END IF ;END IF ;COMMIT;RETURN VAMOUNT;END;---对多行处理,用游标---多单行处理,用SELECT实现此功能,并能在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_IDX on CCB_GYB (ACCOUNTING_DATE);3.假设有学生成绩表(CJ)如下[] [学科] [成绩]三语文 80三数学 86三英语 75四语文 78四数学 85四英语 78现有需求如下:(1)要求统计分数段的人数。

显示结果为:[成绩] [人数]0<成绩<60 060<成绩<80 080<成绩<100 5CREATE OR REPLACE Procedure SCOUNTIsVCOUNT1 Varchar2(10);VCOUNT2 Varchar2(10);VCOUNT3 Varchar2(10);BeginSelect Count(*) Into VCOUNT1 From CJ Where SCORE Between0And60;Select Count(*) Into VCOUNT2 From CJ Where SCORE Between61And80;Select Count(*) Into VCOUNT3 From CJ Where SCORE Between81And100;dbms_output.put_line ('分数'|| ‘‘|| ‘人数’);dbms_output.put_line ('0<成绩<60'|| ‘‘||VCOUNT1);dbms_output.put_line ('60<成绩<80'|| ‘‘|| VCOUNT2);dbms_output.put_line ('81<成绩<100'|| ‘‘|| VCOUNT3);End;(2)要求根据,把各科成绩显示在一条记录里。

显示结果如下:语文数学英语总成绩---------- ---------- ---------- ---------- ----------四 78 85 78241三 80 86 75241总分 158 171 153482(Select D.SSNAME,D.SSOCRE 数学,D.YSCORE 语文,D.ESCORE 英语 ,Sum(D.SSOCRE+D.YSCORE+D.ESCORE) 总成绩From(Select A.SNAME SSNAME ,A.SCORE SSOCRE,B.SCORE YSCORE,C.SCORE ESCORE From CJ A ,CJ B ,CJC Where A.SNAME=B.SNAMEAnd C.SNAME=A.SNAME And A.XK='语文'And B.XK='数学'And C.XK='英语')DGroup By D.SSNAME,D.SSOCRE,D.YSCORE,D.ESCORE)Union All(Select'总分' ,Sum(FF.BB) 数学 ,Sum() 语文,Sum(FF.DD) 英语,Sum(FF.EE) 总成绩From (Select D.SSNAME AA,D.SSOCRE BB,D.YSCORE CC,D.ESCORE DD,Sum(D.SSOCRE+D.YSCORE+D.ESCORE) EE From(Select A.SNAME SSNAME ,A.SCORE SSOCRE,B.SCORE YSCORE,C.SCORE ESCORE From CJ A ,CJ B ,CJC Where A.SNAME=B.SNAMEAnd C.SNAME=A.SNAME And A.XK='语文'And B.XK='数学'And C.XK='英语') DGroup By D.SSNAME,D.SSOCRE,D.YSCORE,D.ESCORE) FF)行转列Select SNAME ,SUM(DECODE(XK,'语文',SCORE,0)) 语文,Sum(DECODE(XK,'数学',SCORE,0)) 数学 ,Sum(DECODE(XK,'英语',SCORE,0)) 英语 , SUM(SCORE) AA From CJGroup By SNAMEUnion AllSelect'总分' ,Sum(DECODE(XK,'语文',SCORE,0)) 语文,Sum(DECODE(XK,'数学',SCORE,0)) 数学 ,Sum(DECODE(XK,'英语',SCORE,0)) 英语 , SUM(SCORE) From CJ使用SQL语句或存储过程(显示结果时可用dbms_output打印出来)实现这两个功能。

DBMS_OUTPUT.PUT_LINE(‘’‘语文’‘数学’‘英语’‘总成绩’)4.某一客户表包含如下信息:INDIVIDUALID 客户ID VARCHAR2(20)(唯一键)BIRTHDATE 出生日期DateGENDER 性别VARCHAR2(10)SALARY 月收入NUMBER(10,2)CERT-TYPE 证件类型VARCHAR2(10)CERT-NO 证件VARCHAR2(20)CREATED-TS 进入系统的时间TIMESTAMP现要把该表数据导出成文件,导出的容格式如下:属性列列长度备注INDIVIDUALID 20BIRTHDATE 8 格式为:yyyymmddGENDER 10SALARY 13CERT-TYPE 10CERT-NO 20CREATED-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_infoMOBILE_ID 移动VARCHAR2(12)CALLIN_TIME 呼入时间DateCALLOUT_TIME 呼出时间DateSTATUS 状态CHAR(1)在某次大批量操作后,数据记录达到100万,MOBILE_ID估计有2万个重复,现要求删除重复的(只保留一条),因为该表是业务表,删除时不能影响业务的正常使用。

编写存储过程实现删除重复的功能。

要求如下:(1)为保证删除的数据以后可查,在删除时要先做备份,备份不成功则不能进行删除。

(2)要有日志记录,比如删除所花时间,删除成功了多少条,失败多少条等操作信息。

(3)如果出现性能问题,要跟踪原因。

生成trace文件进行分析,改进程序。

6.阅读下列说明,回答问题1至问题5。

【说明】某工厂的信息管理数据库的部分关系模式如下所示:职工(职工号,,年龄,月工资,部门号,,办公室)部门(部门号,部门名,负责人代码,任职时间)关系模式的主要属性、含义及约束如表2-1所示,“职工”和“部门”的关系示例分别如表2-2和表2-3所示。

表2-1主要属性、含义及约束表2-2 “职工”关系表2-3“部门”关系【问题1】根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的容。

相关主题