6,7 execs and answers

更新时间:2024-03-14 15:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第六章习题

一.填空题

1. PL/SQL 程序块主要包含3 个主要部分:声明部分、可执行部分和 部分。 2. 在PL/SQL 中, 如果SELECT 语句没有返回列, 则会引发ORACLE 错误,并且将会引发 异常

3. 自定义异常必须使用 语句引发。

4. 查看操作在数据表中所影响的行数,可通过游标的 属性实现。

5. 完成以下PL/SQL块,功能是:接受职员编号并检索职员姓名。将职员姓名存储在变量empname中,如果代码引发VALUE_ERROR异常,则向用户显示错误消息。 DELCARE

empname employee.ename%TYPE; eno employee.empno%TYPE; BEGIN

eno:=’&employee_number’;

________________________________________________________; DBMS_OUTPUT.PUT_LINE(‘职员姓名:’||empname); ___________

WHEN VALUE_ERROR THEN

DBMS_OUTPUT.PUT_LINE(‘要存储在变量中的值过大’) ; END;

6.下列程序计算由0~9 之间的任意3 个不相同的数字组成的三位数,共有多少种不同的组合方式?完成下列程序使其能够正确运行。 DECLARE

counter number:=0; BEGIN

FOR i IN 1..9 LOOP

FOR j IN 0..9 LOOP

IF THEN

FOR k IN 0..9 LOOP

IF THEN

counter:=counter+1; END IF; END LOOP; END IF; END LOOP; END LOOP;

DBMS_OUTPUT.put_line(counter); END;

二.选择题

1. PL/SQL块中不能直接使用的SQL命令是( )。

A.SELECT B.INSERT C.UPDATE D.DROP 2. 要更新游标结果集中的当前行,应使用( )子句。

A.WHERE CURRENT OF B.FOR UPDATE C.FOR DELETE D.FOR MODIFY 3. 用于处理得到单行查询结果的游标为( )。

A.循环游标 B.隐式游标 C.REF游标 D.显式游标 4. Oracle的内置程序包由( )用户所有。

A.SYS B.SYSTEM C.SCOTT D.PUBLIC

5. 如果创建了一个名为USERPKG 的程序包,并在程序包中包含了名为test 的过程。下列哪一个是对这个过程的合法调用?

A.test(10) B.USERPKG.test(10) C.TEST.USERPKG(10) D.TEST(10).USERPKG 6. 如果在程序包的主体中包括了一个过程,但没有在程序包规范中声明这个过程,那么它将会被认为是() 。

A.非法的 B.公有的 C.受限的 D.私有的 7. 以下定义的哪个变量是非法的?

A.var_ab NUMBER(3); B.var_ab NUMBER(3) NOT NULL:='0'; C.var_ab NUMBER(3) DEFAULT:=1; D.var_ab NUMBER(3):=3; 8. 下列哪一个不是BOOLEAN 变量可能的取值?

A.TRUE B.FALSE C.NULL D.BLANK 9. 只能存储一个值的变量是哪种变量?

A.游标 B.标题变量 C.游标变量 D.记录变量 10. 声明%TYPE 类型的变量时,服务器将会做什么操作? A.为该变量检索数据库列的数据类型 B.复制一个变量

C.检索数据库中的数据 D.为该变量检索列的数据类型和值 11. 下列哪一项可以正确地引用记录变量中的一个值?

A.rec_abc(1); B.rec_abc(1).col; C.rec_abc.col; D.rec_abc.first(); 12. 下列哪个语句允许检查UPDATE 语句所影响的行数? A.SQL%FOUND B.SQL%ROWCOUNT C.SQL%COUNTD D.SQL%NOTFOUND

13. 在定义游标时使用的FOR UPDATE 子句的作用是()

A.执行游标 B.执行SQL 语句的UPDATE语句 C.对要更新表的列进行加锁 D.都不对 14. 对于游标FOR 循环,以下哪一种说法是不正确的?

A.循环隐含使用FETCH 获取数据 B.循环隐含使用OPEN 打开记录集 C.终止循环操作也就关闭了游标 D.游标FOR 循环不需要定义游标 15. 如何终止LOOP 循环,而不会出现死循环?

A.在LOOP 语句中的条件为FALSE 时停止 B.这种循环限定的循环次数,它会自动终止循环

C.EXIT WHEN 语句中的条件为TRUE D.EXIT WHEN 语句中的条件为FALSE 16. 如果PL/SQL程序块的可执行部分引发了一个错误,则程序的执行顺序将发生什么变化?

A.程序将转到EXCEPTION部分运行 B.程序将中止运行 C.程序仍然正常运行 D.以上都不对 17. 对于游标FOR循环,以下哪种说法是错误的?

A.循环隐含使用FETCH提取数据 B.循环隐含使用OPEN打开记录集 C.终止循环操作也就关闭了游标 D.使用游标FOR循环不需要定义游标

三.简答题

1. 用FOR循环和其他循环出来游标有什么区别? 2. 描述游标的各个属性。 3. 如何处理用户自定义异常

4. 假设存在表emp (eno char(6) primary key, ename varchar2(20), sal number(6,2), job varchar2(40))编写一个程序块,从emp表中显示名为’SMITH’的雇员的薪水和职位。

第七章习题

一.填空题

1. 完成以下PL/SQL块,功能是:使用游标,显示所有单价低于250元的玩具的单价。

DECLARE

my_toy_price toys.toyprice%TYPE; CURSOR toy_cur IS

SELECT toyprice FROM toys WHERE toyprice<250; BEGIN

_______________ LOOP

__________________________

EXIT WHEN toy_cur%NOTFOUND;

DBMS_OUTPUT.PUT_LINE (toy_cur%ROWCOUNT || '. 玩具单价:' || my_toy_price); END LOOP; CLOSE toy_cur; END; 2. 完成以下PL/SQL块,功能是:使用游标显示销售报表。如果目标销售额(tsales)大于实际销售额(asales),则显示消息“需提高销售额”。如果tsales等于asales,则显示消息“已达到销售额”,否则显示消息“销售业绩出色”

DECLARE

CURSOR sales_cur IS SELECT * FROM salesdetails; BEGIN

___________________________________ IF sales_rec.tsales > sales_rec.asales THEN

DBMS_OUTPUT.PUT_LINE('产品:'||sales_rec.pid||' 需提高销售额'); ELSE

IF ______________________ THEN

DBMS_OUTPUT.PUT_LINE('产品:'||sales_rec.pid||'已达到销售额'); ELSE DBMS_OUTPUT.PUT_LINE('产品:' ||sales_rec.pid||'销售业绩出色'); END IF; END IF; END LOOP; END;

二.选择题

1. ( )触发器允许触发操作中的语句访问行的列值。

A.行级 B.语句级 C.模式 D.数据库级 2. 锁用于提供( )。

A.改进的性能 B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 3. ( )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不允许插入、更新和删除行。

A.行共享 B.行排他 C.共享 D.排他

4. 带有( )子句的SELECT语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH

5. 下列哪个语句可以在SQL*Plus 中直接调用一个过程?

A.RETURN B.CALL C.SET D.EXEC 6. 下面哪些不是过程中参数的有效模式?

A.IN B.IN OUT C.OUT IN D.OUT

7. 如果存在一个名为TEST 的过程,它包含3 个参数:第一个参数为P_NUM1,第二个参数为P_NUM2,第三个参数为P_NUM3。3 个参数的模式都是IN。P_NUM1 参数的数据类型是NUMBER , P_NUM2 参数的数据类型是VARCHAR2 , 第三个参数的数据类型是 VARCHAR2。下列哪一个是该过程的有效调用? A.TEST(1010,P_NUM3=>'abc',P_NUM2=>'bcd') B.TEST(P_NUM1=>1010,P_NUM2=>''abc','bcd') C.TEST(P_NUM1=>1010,'abc','bcd') D.上述都对

8. 函数头部中的RETURN 语句的作用是什么?

A.声明返回的数据类型 B.声明返回值的大小和数据类型 C.调用函数 D.函数头部不能使用RETURN 语句 9. 根据下面的匿名程序块,判断CHECK_VALUE 程序单元是否为一个函数? DECLARE

V_TEST NUMBER; BEGIN

IF V_TEST > 10 THEN

CHECK_VALUE(V_TEST); END IF;

END;

A.可以为一个函数 B.可以,但函数必须不包含任何SQL 语句 C.可以,但需要初始化变量V_TEST D.不可以 10. 对于下面的函数,哪个语句将成功地调用?

CREATE OR REPLACE FUNCTION Calc_Sum(Addend_X number,Addend_Y number) Return number As Sum number;

BEGIN Sum :=Addend_X+Addend_Y; Return Sum; END;

A.Calc_Sum B.EXECUTE Calc_Sum(45) C.EXECUTE Calc_Sum(23,12) D.Sum:=Calc_Sum(23,12) 11. 当满足下列哪种条件时,允许两个过程具有相同的名称?

A.参数的名称或数量不相同时 B.参数的数量或数据类型不相同时 C.参数的数据类型和名称不相同时 D.参数的数量和数据类型不相同时 12. 下列哪一个动作不会激发触发器?()

A.更新数据 B。查询数据 C.删除数据 D.插入数据 13. 在创建触发器时,哪一个语句是决定触发器是针对每一行执行一次,还是针对每一个语句执行一次?()

A. FRO EACHROW B. ON C. REFERENCING D. NEW 14. 替代触发器一般被附加到下列哪一类数据库对象上?() A.表 B. 序列 C. 视图 D. 簇

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

A.BEFOR触发器 B.AFTER触发器 C.INSTEAD OF触发器 D.UNDO触发器

三. 简答题

1. 存储过程与函数有什么区别?

2. 简述调用过程时传递参数值的三种方式。 3. 简述替代触发器的作用。

4. 假设有两张表EMP,DEPT,其中,DEPT表中的主键DEPTNO在EMP表中充当外键,创建一个触发器,当修改DEPT表中的DEPTNO时,是EMP表中的对应值也做相应修改。 5.账户表ACCOUNT结构如下ACCOUNT( ACCOUNTNUM INT PRIMARY KEY, ACCOUNTNAME VARCHAR2(20) , TOTAL FLOAT),利用存储过程来实现下面的应用:从一个账户转指定数额的款到另一个账户。

第六章答案

一. 填空题

1. 异常处理

2. NO_DATA_FOUND 3. raise

4. %ROWCOUN

5. SELECT ename INTO empname FROM employee WHERE empno=eno; EXCEPTION 6. i!=j 或者 i<>j

k!=i and k!=j 或k<>i and k<>j

二. 选择题 1.D 6.D 11.B 16.A 2.A 7.B 12.B 17.D 3.B 8.D 13.B 4.A 9.B 14.D 5.B 10.A 15.C

三.简答题

1. 答: 用For循环编写游标程序:系统自动打开游标,不用显式地使用OPEN语句打开;系统隐含地定义了一个数据类型为%ROWTYPE的变量,并以此作为循环的计算器。系统重复地自动从游标工作区中提取数据并放入计数器变量中。当游标工作区中所有的记录都被提取完毕或循环中断时,系统自动地关闭游标。

2. 答: %FOUND布尔型属性,如果sql语句至少影响到一行数据则该属性为true,否则为false;%NOTFOUND布尔型属性与%FOUND相反;%ISOPEN布尔型属性,当游标已经打开时返回true,游标关闭时则为false;%ROWCOUNT数字型属性,返回受sql语句影响的行数。

3. 答:用户自定义异常是通过显示使用RAISE语句来引发的,当引发一个异常时,控制就转到EXCEPTION异常处理部分执行异常处理语句。步骤如下:定义异常处理,触发异常处理,处理异常。 4.

set serveroutput on; declare

c_sal number(6,2); c_job varchar2(40); begin

select sal,job into c_sal,c_job from emp where emp.ename = 'SMITH';

dbms_output.put_line('SMITH的工资为:'||c_sal||',职位为:'||c_job);

exception

when others then dbms_output.put_line('ERROR!'); end;

第七章答案

一.填空题

1. OPEN toy_cur

FETCH toy_cur INTO my_toy_price; 2. FOR sales_rec IN sales_cur LOOP sales_rec.tsales = sales_rec.asales

二.选择题 1.A 6.C 11.B

2.B 7.A 12.B 3.C 8.A 13.A 4.B 9.D 14.C 5.D 10.D 15.C 三. 简答题

1. 答:过程被存储在数据库中并且存储过程没有返回值存储过程不能由SQL语句直接使用只能通过EXECUT命令或PL/SQL程序块内部调用。函数必须有返回值并且可以作为一个表达式的一部分函数不能作为一个完整的语句使用函数返回值的数据类型在创建函数时定义。

2.答: IN参数由调用者传入并且只能够被存储过程读取它可以接收一个值但是不能在过程中修改这个值 OUT参数由存储过程传入值然后由用户接收参数值它在调用过程时为空在过程的执行中将为这参数指定一个值并在执行结束后返回 IN OUT参数同时具有IN和OUT参数的特性。

3. 答:Instead of 触发器也称替代触发器,定义instead of 触发器后,用户对表的DML操作将不再被执行,而是执行触发器主体中的操作。Instead of 触发器是定义在视图上的,而不是在表上,它是用来替换所使用实际语句的触发器。因为一个视图通常由多个基本表连接而成,这种视图不允许进行instead、update和delete 这样的DML操作。当为视图编写instead of 触发器后,用户对视图的DML操作就不会被执行,而是执行触发器中的PL/SQL语句,这样就可以通过在instead of 触发器中编写适当的代码对构成视图的各个表进行操作。

4.

CREATE OR REPLACE TRIGGER MODIFY_DEPTNO_TRIGGER

BEFORE UPDATE ON DEPT

FOR EACH ROW BEGIN

UPDATE EMP

SET DEPTNO=:NEW.DEPTNO WHERE DEPTNO=:OLD.DEPTNO; END; 5.

CREATE PROCEDURE TRANSFER(inAccount INT , outAccount Int , amount FLOAT) AS DECLARE

totalDeposit Float; BEGIN

SELECT total INTO totalDeposit FROM ACCOUNT

WHERE ACCOUNTNUM = outAccount; IF totalDeposit IS NULL THEN ROLLBACK; RETURN; END IF;

IF totalDeposit< amount THEN ROLLBACK; RETURN; END IF;

UPDATE amount SET total=total-amount WHERE ACCOUNTNUM=outAccount; UPDATE amount SET total=total+amount WHERE ACCOUNTNUM=inAccount; commit; END;

本文来源:https://www.bwwdw.com/article/txe8.html

Top