oracle-存储过程练习题
oracle-存储过程练习题

1.创建用户kaifa (密码亦为kaifa)并分配connect,create table,resource 权限。
tCREATE user KAIFA IDENTIFIED BY KAIFA DEFAULT TABLESPACE HOSDATATEMPOARY TABLESPACE TEMPDATA;GRANT CONNECT . CREATE TABLE • RESOURCE TO KAIFA2.在做报表统计时,需要根据报表日期和币种从概要表中查询本期余额。
其中币种代码如下:--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 :'DATE Date;BEGINSELECT ACCOUNTING.DATE INTO VDATE FROM CCB_GYBWhere ACCOUNTING_DATE = Vqrp_rq;IF Vqrp_code = 'RMB* THENSELECT RMB_YTD_BA1-ANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqip_code二r RMB*AND ACCOUNTING_DATE- VDATE;ELSEIF Vqrp.code = 'CNT THENSELECT CNY_YTD_BALANCII INTO VAMOUNT FROM CCB_GYB WHERE Vqip_code二'CNY';ELSESELECT USD_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code-END IF :END IF ;COMMIT;RETURN VAMOUNT;END;■一对多行处理.用游标一-多单行处理,用SELECT实现此功能,并能在sqlplus里调用。
Oracle 考试试题(带答案)

a) b) c) d) 参考答案
OracleHOME_NAMETNSListener OracleServiceSID OracleHOME_NAMEAgent OracleHOME_NAMEHTTPServer
B
9) 在 Oracle 中创建用户时,若未提及 DEFAULT TABLESPACE 关键字,则 Oracle 就将()表空间分配 给用户作为默认表空间。。
DATEPART EXTRACT TO_CHAR TRUNC
bc
5) 在Oracle中,有一个教师表teacher的结构如下: ID NUMBER(5) NAME VARCHAR2(25) EMAIL VARCHAR2(50) 下面哪个语句显示没有Email地址的教师姓名()。
a) b) c) d) 参考答案
a) b) c) d) 参考答案
OracleHOME_NAMETNSListener OracleServiceSID OracleHOME_NAMEAgent OracleHOME_NAMEHTTPServer
a
8) 在Windows操作系统中,Oracle的()服务是使用 iSQL*Plus必须的。
A
12) 在Oracle中,下面用于限制分组函数的返回值的子句是 ()。
a) WHERE b) HAVING c) ORDER BY d) 无法限定分组函数的返回值
参考答案 b
13) 在Oracle中,有一个名为seq的序列对象,以下语句能返 回序列值但不会引起序列值增加的是()。
a) b) c) d) 参考答案
%NOTFOUND %FOUND %ROWTYPE %ISOPEN %ROWCOUNT
c
15) 在Oracle中,当控制一个显式游标时,下面哪种命令包 含INTO子句()。
存储过程练习题

存储过程练习题存储过程是一种数据库对象,可以封装一系列的SQL语句并在数据库中进行存储和执行。
它在提高数据库性能和简化开发过程方面具有重要作用。
本文将从实际问题出发,提供一些存储过程练习题,帮助读者巩固并加深对存储过程的理解。
1. 创建一个存储过程,根据指定日期的订单数量进行统计,并将结果返回。
创建存储过程:DELIMITER //CREATE PROCEDURE OrderCount(IN orderDate DATE, OUT quantity INT)BEGINSELECT COUNT(*) INTO quantity FROM Orders WHERE order_date = orderDate;END //DELIMITER ;调用存储过程:CALL OrderCount('2022-01-01', @quantity);SELECT @quantity;该存储过程通过接收一个订单日期作为输入参数,统计对应日期的订单数量,并将结果存储在输出参数中。
2. 创建一个存储过程,根据产品名称模糊查询对应的订单信息,并按照订单日期降序返回。
创建存储过程:DELIMITER //CREATE PROCEDURE SearchOrders(IN productName VARCHAR(100))BEGINSELECT * FROM Orders JOIN Products ON Orders.product_id = Products.idWHERE LIKE CONCAT('%', productName, '%')ORDER BY order_date DESC;END //DELIMITER ;调用存储过程:CALL SearchOrders('手机');该存储过程通过接收一个产品名称作为输入参数,根据该名称模糊查询对应订单的详细信息,并按照订单日期降序返回结果集。
OracleDBA认证考试存储管理试题及答案

OracleDBA认证考试存储管理试题及答案Oracle DBA认证考试存储管理试题及答案Q. 1 : Oracle immediately re-uses the space assigned to row-directory portion of the data block once you delete the corresponding rows.1. True2. False2Q. 2 : Which of the following three portions of a data block are collectively called as Overhead.1. table directory, row directory and row data2. data block header, table diretory and free space3. table directory, row directory and data blcok header4. data block header, row data and row header3Q. 3 : Which portion of the data block contains table or index data1. table directory2. row directory3. overhead4. row data4Q. 4 : What are the two space management parameters for controling the use of free space in a data block1. INITIAL and NEXT2. PCTFREE and PCTUSED3. TABLESPACE and STORAGE4. free space cannot be controlled at block level2Q. 5 : The maximum number of transactions that a block can support is1. 1002. 2553. 10004. unlimited2Q. 6 : what is PCTFREE1. A space management parameter which sets aside that much percentage of memory in the data block for future update of existing rows.2. A space management parameter which determines the minimum percentage of a block that can be used for row data plus overhead.3. A space management parameter which tells Oracle that the block is available for inserts after the percentage of used memory falls below certain percentage.4. all of them1Q. 7 : What is the default value of NEXT parameter1. 1 block2. 2 blocks3. 5 blocks4. 100 blocks3Q. 8 : Which parameter reserves the more space for future updates1. high PCTINCREASE2. high PCTFREE3. high INITIAL2Q. 9 : PCTFREE and PCTUSED together should not exceed1. 1002. 503. 254. 101Q. 10 : Row migration is a result of1. not enough space in a block for new rows.2. not enough memory for sorts3. not enough space for updates in the current block4. all of them3Q. 11 : Frequent deallocation of extents result in1. truncated segments2. block fragmentation3. truncated tablespaces4. tablespace fragmentation4Q. 12 : Which background process coalesce the fragmented space1. SMON2. PMON3. DBWR4. LGWR1Q. 13 : Row migration is a result of1. high PCTFREE2. low PCTFREE4. low PCTUSED 2。
oracle练习题及答案

oracle练习题及答案Oracle练习题及答案Oracle是一种强大的关系数据库管理系统,被广泛应用于企业级应用程序和数据管理中。
为了帮助大家更好地掌握Oracle数据库的知识,以下是一些Oracle练习题及答案,希望能够帮助大家更好地理解和掌握Oracle数据库的知识。
1. 什么是Oracle数据库?Oracle数据库是一种关系数据库管理系统,由美国Oracle公司开发。
它是一种高性能、可靠性高的数据库系统,被广泛应用于企业级应用程序和数据管理中。
2. Oracle数据库的特点有哪些?Oracle数据库具有以下特点:高性能、高可用性、可伸缩性、安全性高、灵活性强、易管理等。
3. 如何创建一个新的数据库用户?在Oracle数据库中,可以使用以下SQL语句来创建一个新的数据库用户:```CREATE USER username IDENTIFIED BY password;```4. 如何查看Oracle数据库中所有的表?可以使用以下SQL语句来查看Oracle数据库中所有的表:```SELECT table_name FROM user_tables;```5. 如何在Oracle数据库中插入一条新的记录?可以使用以下SQL语句来在Oracle数据库中插入一条新的记录:```INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);```6. 如何在Oracle数据库中更新一条记录?可以使用以下SQL语句来在Oracle数据库中更新一条记录:```UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;```7. 如何在Oracle数据库中删除一条记录?可以使用以下SQL语句来在Oracle数据库中删除一条记录:```DELETE FROM table_name WHERE condition;```通过以上Oracle练习题及答案的学习,相信大家对Oracle数据库有了更深入的了解。
oracle存储过程面试题目

oracle存储过程面试题目在Oracle数据库中,存储过程是一系列的SQL语句和逻辑操作组合在一起,被封装为一个单元,可以在应用程序中被调用。
存储过程在数据库开发中起到了重要的作用,因此对于从事数据库开发或相关职位的人员来说,掌握存储过程的知识和技巧是非常重要的。
在面试中,面试官可能会问一些与Oracle存储过程相关的问题,下面是一些常见的存储过程面试题目及其答案。
1. 什么是存储过程?答:存储过程是一种数据库对象,可以被调用执行。
它是一段预编译的、可重复使用的代码块,由SQL语句、流程控制语句和一些特殊的PL/SQL语句组成。
2. 存储过程有哪些优点?答:存储过程具有以下优点:- 提高数据库性能:存储过程在服务器端执行,可以减少网络传输的开销,提高响应速度。
- 提高安全性:存储过程可以对数据进行封装,只暴露必要的接口,减少了SQL注入的风险。
- 提高可维护性:存储过程可以被重复调用,避免了重复编写SQL语句的工作,方便维护和管理。
- 支持事务控制:存储过程可以包含事务处理逻辑,可以确保数据的完整性和一致性。
3. 存储过程和函数有什么区别?答:存储过程和函数都是一段预编译的代码块,但有以下区别:- 函数必须返回一个值,而存储过程可以不返回值。
- 函数可以在SQL语句中直接调用,而存储过程需要使用CALL语句显式地调用。
- 存储过程可以有输出参数,而函数只能有输入参数和返回值。
- 存储过程可以包含事务处理逻辑,而函数不支持事务控制。
4. 如何创建一个存储过程?答:以下是创建一个简单存储过程的示例:```CREATE OR REPLACE PROCEDURE calculate_salary (employee_id IN NUMBER, salary OUT NUMBER)ISBEGINSELECT salary INTO salary FROM employees WHERE employee_id = employee_id;salary := salary + 1000;END;/```5. 如何调用存储过程?答:可以使用CALL语句或者直接调用存储过程的名字来执行存储过程。
Oracle 考试试题(带答案)

session2 ---------------------------------------
T2 delete from t where rownum <=100;
T3
begin
delete from t where rownum <=100;
commit;
end;
/
T4 truncate table t;
select seq.ROWNUM from dual; select seq.ROWID from dual; select seq.CURRVAL from dual; select seq.NEXTVAL from dual;
c
14) 在Oracle中,游标都具有下列属性,除了()。
a) b) c) d) e) 参考答案
SELECT name FROM teacher WHERE email = NULL;
SELECT name FROM teacher WHERE email <> NULL;
SELECT name FROM teacher WHERE email IS NULL;
SELECT name FROM teacher WHERE email IS NOT NULL;
a) b) c) d) 参考答案
归档日志运行模式 RECOVER命令 恢复管理器(RMAN) Export和Import工具
d
18 有表一的查询结果如下,该表为学生成绩表
select id,grade from student_grade
ID
GRADE
--------
-----------
1
数据库存储过程练习附答案

存储过程、触发器练习1、在学生选课数据库中,创建一存储过程deptmale,查询指定系的男生人数,其中系为输入参数,人数为输出参数。
create proc p_dept@dept char(20),@mannum int outputasselect @allcre=count(sno) from studentwhere sdept=@dept and ssex='男'declare @num intexec p_dept '计算机系',@num outputprint @num2、在s_c数据库中,创建一个存储过程totalcredit,根据输入的学生姓名,计算其总学分。
(使用输出参数)。
并执行该存储过程。
create proc p_cou@name char(10),@allcre int outputasselect @allcre=sum(ccredit)from student,course,scwhere student.sno=sc.sno and o=oand sname=@name group by sc.snodeclare @asum intexec p_cou '刘晨',@asum outputprint @asum3、创建一更新触发器upd_grade,设置sc表的grade字段不能被更新,并显示信息“学生成绩不能被修改,请与教务处联系”。
CREATE TRIGGER mes_scON scFOR UPDATEASIF UPDATE(grade)BEGINROLLBACK TRANPRINT '学生成绩不能被修改,请与教务处联系'END4、创建一个insert触发器uninsertstu,当在student表中插入一条新纪录时,如果是“计算机系”的学生,则撤销该插入操作,并返回“此系人数已满,不能再添加”信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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视图如下所示,请在空缺处填入正确的容。