ORACLE11g试题答案(陈冬亮) 下载本文

内容发布更新时间 : 2024/5/3 3:49:41星期一 下面是文章的全部内容请认真阅读。

BEGIN ----

value1 := airline.book_ticket(‘10’); 二、填空题

1. 存储过程 是存储在服务器上的一组预编译的Transcat-SQL语句。 2.由于存储过程每次执行时 否 (是,否)都要检查有语法错误

3.程序包包括两个组成部分,即 包头 和 包体 。前者包含了该程序包的信息、过程和函数列表,后者包含实际的代码。

4.如果希望查看过程的有关信息,那么可以使用 USER_SOURCE 数据字典视图。

5.创建和替换存储过程的语句是 CREATE OR REPLACE PROCEDURE ,删除存储过程的语句是 DROP PROCEDURE ,创建和替换函数的语句是 CREATE OR REPLACE FUNCTION ,删除函数的语句是 DROP FUNCTION 。 6.在下面程序的空白处填写一定的代码,使该函数输出0-100的值 clear;

create or replace procedure mydel(in_a in integer) as

a integer; begin a:=0;

while a<100 loop

dbms_output.put_line(a) ; a:=a+1; end loop; end;

7.在下面程序的空白处填写一定的代码,使该函数可以获取指定编号的商品价格。 CREATE O REPLACE FUNCTION get_price (pid varchar2)

RETURN NUMBER IS V_price NUMBER BEGIN

SELECT 单价

INTO V_price

FROM 商品信息 WHERE 商品编号= pid ; RETURN v_price EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE(?查找的商品不存在!?); WHEN TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE(?程序运行错误!请使用游标?);

45

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(?发生其他错误!?); END get_price; 三、问答题

1.什么是存储过程,为什么要使用存储过程? 解:

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

(1)存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

(2)当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。

(3)存储过程可以重复使用,可减少数据库开发人员的工作量。

(4)安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

2.创建存储过程,要求输入员工号,输出该员工的工资 资料(编号、姓名、工资、工作所在地)。 解:

CREATE OR REPLACE PROCEDURE PRO_NAME( in_id IN VARCHAR2,

out_wage OUT VARCHAR2) AS BEGIN

SELECT工资into out_wage FROM资料WHERE编号=in_id; END PRO_NAME;

3.创建一个存储过程P1,要求执行改存储过程能够返回考生数据表(tblkaosheng) 中bmdwdm(报名单位代码)为100,200,500的考生的zkzh(准考证号)、 (xm)姓名和kscj(考试成绩)结果集,并且该结果集要按照bmdwdm(报名单位代码)和准考证号升序排列 解:

CREATE PROCEDURE p1 AS

select zkzh,xm,kscj from tblkaosheng

where bmdwdm in (100,200,500) order by bmdwdm asc, zkzh asc

46

4.创建一个存储过程P2,要求执行改存储过程能够返回考生数据表(tblkaosheng)中所有“陈”姓考生的xm(姓名)、lxdh(联系电话)结果集。 解:

CREATE PROCEDURE p2 AS

select xm,lxdh from tblkaosheng where xm like '陈%

5.Oracle中有以下表User 字段名 字段类型 Id int

Name Varchar2(20) password Varchar2(10)

请在Oracle中编写一个函数getUserByInterval,有参数(int start,int end)分别表示要获取记录的起始和结束位置,返回User表中记录序号从start到end的结果集。(注:这里的记录位置是指该记录在表中存放的位置,而不是id号)。 解:

CREATE OR REPLACE PACKAGE \type mycursor is ref cursor; end;

CREATE OR REPLACE FUNCTION getUserByInterval (v_start integer,v_end integer) return mypackage.mycursor is

myresult mypackage.mycursor; begin

open myresult for

select * from (select rownum r,UserInfo.* from UserInfo where rownum <= v_end) t where t.r >= v_start; return myresult; end;

47

第十二章 触发器

一、单项选择题

1.触发器的类型不包括的是( B )。

A.DML触发器 B.DDL触发器 C.替代触发器 D.系统触发器

2.在SQL语言中,如果要建立一个工资表,包含职工号、姓名、职称、工资等字段。若要保证\工资\字段的取值不低于800元,最合适的实现方法是( C ) A.在创建工资表时为'\工资字段建立缺省(default)

B.在创建工资表时为\工资\字段建立检查约束(check constraint) C.在工资表上建立一个触发器(trigger) D.为工资表数据输入编写一个程序进行控制

3.如果希望执行某个操作时,该操作本身不执行,而是去执行另外的某些操作,那么可以使用什么方式完整这种操作?( A )

A.before 触发器 B.after触发器 C.instead of触发器 D.undo触发器 4.系统事件触发器共支持5种系统事件,下列(B )事件不会激发触发器。 A.更新数据 B.查询数据 C.删除数据 D.插入数据

5.在使用CREATE TRIGGER语句创建行级触发器时,哪一个语句用来引用旧数据?( D ) A. FOR EACH B.ON C.REFERENCING D.OLD

6.在创建触发器时,哪一个语句决定了触发器是针对每一行执行一次,还是针对每一个语句执行一次?( D )

A.FOR EACH B.ON C.REFERENCING D.NEW

7.替代触发器可以被附加到哪一类数据库对象上?( C ) A.表 B.序列 C.视图 D.蔟

8.下列哪个语句用于禁用触发器?( C )

A.ALTER TABLE B.MODIFY TRIGGER C.ALTER TRIGGER D.DROP TRIGGER 9.可以使用哪个语句来更改相关性标识符的名称?( A ) A.REFERENCING B.WHEN C.INSTEAD OF D.RENAME

10.对一个视图myView创建一个触发器mytrigger,语句为( C )。 A.CREATE TRIGGER mytrigger

48