第十章 PL/SQL基础
一、单项选择题
1.PL/SQL最早出现的Oracle版本是( C )
A.Oracle 1 B.Oracle 7 C.Oracle 6 D.Oracle 9i 2.在PL/SQL中,下列( D )变量名合法。 A.1VAR B.?var_ab C.$ABC D.ROS$$_1 3.只能存储一个值的变量是( B )
A.游标 B.标量变量 C.游标变量 D.记录变量 4.PL/SQL语言的基本逻辑结构不包括( A )。
A.模块 B.顺序 C.选择 D.循环 5.在以下的表的显示结果中,以下语句的执行结果是 SQL> select * from usertable; USERID USERNAME
----------- ---------------- 1 user1 2 user2 3 user3 4 user4 5 user5
SQL> select * from usergrade; USERNAME GRADE ---------------- ----------
37
user9 90 user8 80 user7 80 user2 90 user1 100 user1 80 执行语句
语句一: Select count(*) from usertable t1 where username in (select username from usergrade t2 where rownum <=1);
语句二: Select count(*) from usertable t1 where exists (select 'x' from usergrade t2 where t1.username=t2.username and rownum <=1);
以上语句一的执行结果是: ( A ) , 以上语句二的执行结果是: ( C ) A. 0 B. 1 C.2 D. 3
6.下列哪个语句允许检查UPDATE语句所影响的行数?( B ) A.SQL%FOUND B.SQL%ROWCOUNT C.SQL%COUNT D.SQL%NOTFOUND 7.下列哪一项可以正确地引用记录变量的值?( B )
A.rec_abc(1) B.rec_abc(1).col C.rec_abc.col D.rec_abc.first(); 8.声明%TYPE类型的变量时,服务器将会做什么操作?( A ) A.为该变量检索数据库列的数据类型 B.复制一个变量
C.检索数据库中的数据 D.为该变量检索列的数据类型和值 9.如何终止LOOP循环,而不会出现死循环?( D ) A.在LOOP语句中的条件为FALSE时停止。 B.这种循环限定的次数,它会自动终止循环。 C.EXIT WHEN语句中的条件为TRUE D.EXIT WHEN语句中的条件为FALSE 10. 有一段PL/SQL程序如下所示: var1 := 10; LOOP
EXIT WHEN var1 > 12; var1 := var1 +1;
DBMS_OUTPUT.PUT_LINE(?A?); END LOOP;
输出为( C )。 A. A
B. A A C. A A D . A A
38
A
11.DBMS_LOB数据包提供的( D ),返回LOB值的长度。 A. LENGTH B.SUBSTR C.INSTR D.GETLENGTH
12.PL/SQL为内存耗尽时,预定义了( C )异常。 A.NO_DATA_FOUND B.MEMORY_ERROR C.STORAGE_ERROR D.NO_MEMEORY_FOUND
13.在PL/SQL中,在执行任何DML语句前,SQL%NOTFOUND的值为( C )。(选择一项) A. NOTFOUND B. TRUE C. NULL D. FALSE 二、填空题
1.PL/SQL程序块主要包含3个主要部分:声明部分、可执行部分和 异常处理 部分。 2.使用显式游标主要有4个步骤:声明游标、 打开游标 、检索数据、 关闭游标 。 3.你刚刚编译了一个PL/SQL Package但是有错误报道,使用 SHOW ERRORS 命令显示出错信息?
4.查看下面程序块,DBMS_OUTPUT将显示什么结果? N 。 DECLARE
var_a CHAR(1):=’N’; BEGIN DECLARE
var_a CHAR(2); BEGIN
Var_a:=’Y’; END;
DBMA_OUTPUT.put_line(var_a); END;
5.查看下面程序块,其中变量Var2的结果是 5 。 DECLARE
var1 number:=1000; Var2 number; BEGIN
IF var1>500 THEN Var2:=5;
ELSEIF var1>1000 THEN Var2:=10; ELSE
Var2:=15; END IF; END;
6.自定义异常必须使用 RAISE 语句引发。 三、问答题
39
1. PL/SQL提供了哪些循环结构?举例说明 解:
1))LOOP语句格式: LOOP
执行语句;
EXIT WHEN expression1; END LOOP; eg:
--从1加到100 declare
v_i number := 1; v_Sum number := 0; begin
loop
v_Sum := v_Sum + v_i; v_i := v_i + 1;
exit when v_i > 100; end loop;
DBMS_OUTPUT.PUT_LINE(v_Sum); end;
2))WHILE语句格式:
while (condition expression) loop 执行语句; end loop; eg:
--从1加到100 declare
v_i int := 1; v_sum int := 0; begin
while (v_i < 101) loop v_sum := v_sum + v_i; v_i := v_i + 1; end loop;
dbms_output.put_line(v_sum); exception
when others then
dbms_output.put_line('ERROR!');
40