(word完整版)Oracle测试题及答案,推荐文档_第1页
(word完整版)Oracle测试题及答案,推荐文档_第2页
(word完整版)Oracle测试题及答案,推荐文档_第3页
(word完整版)Oracle测试题及答案,推荐文档_第4页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle试题(数据库技术及应用)学号姓名分数( 一)按照题意写出 SQL语句( 45 分 每题 3 分)本题用到下面三个关系表:借书卡 card(cno卡号 ,name 姓名 ,class班级 )图书 books(bno 书号 ,bname 书名 ,author作者, price单价 ,quantity库存册数)借书记录 borrow (cno 借书卡号 ,bno 书号 ,rdate 还书日期 ) 注:限定每人每种书只能借一本;库存册数随借书、还书而改变。1写出建立borrow 表的 SQL语句,要求定义主码完整性约束和引用完整性约束。create table card(cno char(

2、6) primary key,name varchar2(10),class varchar2(12);create table books(bno char(8) primary key,bname varchar2(50),author varchar2(10),price number(5,3),quantity number(4);create table borrow(cno char(6) references card(cno) on delete cascade,bno char(8) references books(bno) on delete cascade,rdate

3、date,primary key(cno,bno);2找出借书超过 select cno,count(*)5 本的读者册数, 输出借书卡号及所借图书册数。from borrowgroup by cnohaving count(*)>5;3查询借阅了“水浒”一书的读者,输出姓名及班级。select name,classfrom cardwhere cno in (select cnofrom borrowwhere bno=(select bnofrom bookswhere bname=')水浒 ');4查询过期未还图书,输出借阅者(卡号)、书号及还书日期。select

4、o,bno,rdatefrom card c,borrow bwhere o=o and b.rdate<sysdate;5查询书名包括“网络”关键词的图书,输出书号、书名、作者。select bno,bname,authorfrom bookswhere bname like '%网络 %'6查询现有图书中价格最高的图书,输出书名及作者。select bname,authorfrom bookswhere price in (select max(price)from books);7查询当前借了“计算方法”但没有借“计算方法习题集”的读者,输出其借书卡号,并按卡号降序

5、排序输出。select cnofrom borrowwhere bno=(select bnofrom bookswhere bname='计算方法')and bno not in (select bnofrom bookswhere bname='计算机方法习题集')order by cno desc;8将“ c01”班同学所借图书的还期都延长一周。update borrowset rdate=rdate+7where cno in (select cnofrom cardwhere class='c01');commit;9从 books 表

6、中删除当前无人借阅的图书记录。select *from bookswhere bno not in (select bnofrom borrow);10如果经常按书名查询图书信息,请建立合适的索引。create index bname_idx on books(bname);11在 borrow 表上建立一个触发器,完成如下功能:如果读者借阅的书名是“数据库技术及应用”,就将该读者的借阅记录保存在 borrow_save 表中(注:borrow_save 表结构同 borrow 表)。create table borrow_save as(select * from borrow);delet

7、e borrow_save;commit;create or replace trigger borrow_inafter inserton borrowfor each rowdeclares books.bno%type; beginselect bno into s from books where bname='数据库技术及应用'if s=:new.bno theninsert into borrow_savevalues (:o,:new.bno,:new.rdate);end if;end;/12建立一个视图,显示“力01”班学生的借书信息(只要求显示姓名和书名)。

8、create view ca_view as(select name,bnofrom card c,borrow bwhere o=b.bno and c.class='力 01');13查询当前同时借有“计算方法”和“组合数学”两本书的读者,输出其借书卡号,并按卡号升序排序输出。(select cnofrom borrowwhere bno=( select bnofrom bookswhere bname='计算方法 ')intersect(select cnofrom borrowwhere bno=(select bnofrom bookswhere b

9、name='组合数学 ')order by cno;14假定在建books 表时没有定义主码,写出为books 表追加定义主码的语句。Alter table booksAdd(primary key (bno);15对 card 表做如下修改:将 name最大列宽增加到 10 个字符(假定原为 6 个字符)。为该表增加 1 列: dname(系名),可变长,最大 20 个字符。 alter table cardadd(dname varchar2(20)modify(name varchar2(10);( 二)简要回答下列问题( 30 分,每题 3 分)1数据库中“事务”的概念

10、是什么?在数据库应用中它起什么作用?事务时数据库系统中处理的最小单位。一个事物是由一个或多个逻辑相关的SQL语句组成,这些语句共同完成某项任务。由这些 SQL语句所引起的数据库中数据的变化要么“提交”(江事务对数据库所作的全部修改永久化)、要么回滚 (事物的修改工作全部撤销),这就是事务的原子性。事务可以保证各种程序的正确执行,利用事务可确保数据库中数据的完整性和一致性。2什么是“写丢失”问题?在Oracle 数据库中如何解决“写丢失”?当第一个用户想对某一数据进行修改时,现将该数据读入内存中还为修改写回数据库时,这时第二个用户也将这个数据读入内存中,他们读到一致的数据,用户一开始修改该数据然

11、后将修改写回数据库中,这时用户二也将数据进行了修改随后也将修改后的数据写回数据库中,这时就发生了 写丢失 ,用户二对数据库的修改覆盖了用户一的修改工作。解决 两个写事务冲突的办法就是采用“加锁” 机制。 例如 A 、B 两个事务同时对一个表的某航数据进行修改, A 事务首先修改时对该数据加锁,禁止其他事务对该数据的修改。只有当A 事务完成修改工作、并将锁打开后,其他事物才被允许修改。这时候等待的B 事务才可以对该数据进行修改。 锁可以防止两个写事务同时对一个数据进行修改,所以也就不会出现写丢失的错误。3“触发器” 和“存储过程” 有什么异同 (在它们的定义中, 都定义了一段 PL/SQL程序)

12、 ?存储过程 将常用的或很复杂的工作,预先用 SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时, 只需调用 execute,即可自动完成命令。它是作为数据库对象存储在数据库中的子程序。触发器 一个与表相关联的、被存储的PL/SQL 程序,每当一个特定的数据操作语句在指定的表上发生时,就会引发触发器的执行。与存储过程的调用方式不同,触发器的执行时采用处罚机制。两者的应用方向也不同, 触发器实现表措作的前处理和后处理(如表别修改时, 给其他需运行的程序发信号) 。也应用在审计,可以跟踪表上所实现的数据操作。4 建立一个 “快照”,实现如下功能:

13、 每周六的晚上 11 点,将远程数据库上user1 用户(其帐号的密码为 abc )下的 emp表中内容复制到本地。请写出建立数据库链的语句和建立快照的语句(注:题中未给出的信息可由你来设定)。create database link user_linkconnet to user1 identified by abcusing 'db8i2'create snapshot user_copyrefresh completestart with sysdatenext_day( trunc(sysdate) ,星期六 ) + 23/24asselect * from empus

14、er_link;5在 SQL*Plus 环境中,如何查看你自己建立了哪些表?如何查看一个表的结构如何?select * from user_table; Select table_name from dba_tables where owner= 用户名 ; desc tablename;6已知关系 R(U,F) , U = ( A,B,C,D,E ) ,F=A->B, B->C, CD->E 给出关系 R 的码,并写出求解依据。关系 R 满足第几范式,并说出其理由。因为 A->B,B->C所以 A->C;CD->E因此 AD->E , AD-&

15、gt;CD,AD->BD故 AD->ABCDEAD->(A,B,C,D,E)码是 AD7与关系数据库相比,对象关系数据库在哪些方面做了扩充?对象关系数据库与关系数据库相比,在以下两方面做了扩充:(1)支持对象模型,实现了面向对象数据库的基本功能在对象关系数据库中, 同时支持关系模型和对象模型, 同时存在两种不同类型的二维表: 关系表和对象表;( 2)对象关系数据库扩充了关系数据库的数据类型,支持用户自定义的数据类型;目前ORACLE已支持三种新的数据类型:对象类型、数组类型和嵌套表类型。8什么是外来码?它在关系数据库中起什么作用?外来码是为不同关系表中数据之间完整性和一致性定

16、义的引用完整性约束。间联系的纽带。在关系数据库中用外来码保证多表之间数据的一致性和完整性。9 请你通过一个例子,说明PL/SQL 块嵌套的应用。DECLAREtin_rectin % rowtype ;v_passwduserlog.passwd % type ;error EXCEPTION;mark INTEGER;BEGINBEGIN/嵌套块 1select * into tin_rec from tin ;EXCEPTIONWHEN NO_DATA_FOUND THENMark=1;RASIE error;ENDBEGIN/嵌套块 2select passwd into v_passw

17、dfrom userlogwhere userid = tin_rec.ud ;EXCEPTIONWHEN NO_DATA_FOUND THENMark=2;RASIE error;END;if v_passwd = tin_rec.ps theninsert into tout values(用户输入正确);elseinsert into tout values(用户密码错误;end if ;exceptionwhen error thenif mark=1 theninsert into tout values(输入没准备好 ;else mark=2 theninsert into tou

18、t values(账号不正确 ;外来码是多表之end if;end;10在 Delphi的应用开发中,如果采用TQuery 组件,并且在执行时动态为它指定如下语句:update emp set sal = sal +200 where ename='张明 '请写出有关程序代码判片断 (为 Query1 对象的 SQL 属性添加 update 语句,并利用 Query 的方法执行该 update 语句)在 form1 中建立 database1 、Tquery1 、datasource1 、 button1 等对象在 query1 的 SQL语句编辑器中不输入任何语句更新按钮的click事件procedure TForm1.Button1Click(Sender: TObject);beginquery1.Close;query1.SQL .add('where ename=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论