Oracle 面试题库—PL/SQL
时间:2019-01-05 21:33 来源:未知 作者:IT
1 PL/SQL代表
A PROCEDURAL LANGUAGE/SQL
B PROGRAM LANGUAGE SQL
C POWER LANGUAGE SQL
D 都不对
2 _____引擎执行PL/SQL块
A SQL
B PL/SQL
C ORACLE
D 都不对
3 一个对象可以呈现多种形式的能力称为
A 多态
B 继承
C 封装
D 以上都不对
4 PLSQL块是由哪几个部分组成
A DECLARE BEGIN END
B BEGIN END
C EXCEPTION BEGIN END
D DECLARE BEGIN EXCEPTION END
5 看下面代码,正确的是
A DECLARE
DBMS_OUTPUT.PUT_LINE(‘定义部分’);
BEGIN
DBMS_OUTPUT.PUT_LINE(‘语句部分’);
END;
B BEGIN
NUM NUMBER:=100;
DBMS_OUTPUT.PUT_LINE(‘NUM 的值为:’||NUM);
END;
C DECLARE
NUM NUMBER:=100;
BEGIN
NUM:=NUM+NUM/2;
DBMS_OUTPUT.PUT_LINE(‘NUM 的值为:’||NUM);
END;
D BEGIN
NUM NUMBER:=100;
DECLARE
NUM:=NUM+NUM/2;
DBMS_OUTPUT.PUT_LINE(‘NUM 的值为:’||NUM);
END;
6 看下面语句正确的是
A IF(N%M=0) THEN
DBMS_OUTPUT.PUT_LINE(‘这是一个偶数’);
ELSEIF(N%M=1) THEN
DBMS_OUTPUT.PUT_LINE(‘这是一个奇数’);
END IF;
B DECLARE
VAR NUMBER:=0;
BEGIN
VAR:=&V;
CASE
WHEN VAR=1 THEN
DBMS_OUTPUT.PUT_LINE(‘A’);
WHEN VAR=2 THEN
DBMS_OUTPUT.PUT_LINE(‘B’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘O’);
END CASE;
END;
C DECLARE
I NUMBER:=0;
BEGIN
FOR I IN 10..20 LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
END;
D LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
7. 当在一个PLSQL块中通过查询得到一个值,但是没有任何值返回时,会产生异常吗?如果产生,是什么异常?
A 不会有异常,只不过没有结果而已
B 有异常,异常为No_data_found
C 有异常,异常为Value_erro
D 编译都不通过
8. 在PLSQL块中处理异常的语句是
A EXCEPTION
IF EXCEPTION_NAME THEN
DBMS_OUTPUT.PUT_LINE();
END;
B EXCEPTION
WHEN EXCEPTION_NAME THEN
DBMS_OUTPUT.PUT_LINE();
END EXCEPTION ;
C WHEN EXCEPTION_NAME THEN
DBMS_OUTPUT.PUT_LINE();
D BEGIN
NULL;
EXCEPTION
WHEN EXCEPTION_NAME THEN
DBMS_OUTPUT.PUT_LINE();
END ;
9. 当用户在PLSQL块中,像抛出自定义异常或者是系统异常时,所使用的关键字是
A THROW
B RAISE
C RAISE_APPLICATION_ERROR
D EXCEPTION
10. 在自定义异常中,用户可用的错误号范围在
A 20000 ~ 29999
B -20000 ~ -20999
C 1~65535
D 没有限制
11. 阅读代码
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE(‘外不快’);
DECLARE
MYEXCE EXCEPTION;
BEGIN
RAISE MYEXCE;
END;
EXCEPTION
WHEN MYEXCE THEN
DBMS_OUTPUT.PUT_LINE(‘异常捕获’);
END;
出现的结果是
A 编译时报错 PLS-00201: 必须说明标识符 ‘MYEXCE’
B 运行时报错,在外部无法捕获到内部异常
C 可以正常执行
D 编译时报错,PLSQL块不能嵌套
12. 使用游标的步骤,有哪几步
A 打开游标、使用游标、关闭游标
B 定义游标、打开游标、使用游标、关闭游标
C 定义游标、使用游标、关闭游标
D 定义游标、打开游标、使用游标、
13 游标有哪几种类型
A 静态游标、动态游标
B 隐式游标、显示游标
C 变量游标、常量游标
D 参数游标、ref 游标
14 阅读下列代码
DECLARE
TOTALEMP NUMBER;
BEGIN
SELECT COUNT(*) INTO TOTALEMP FROM EMP;
IF(SQL%FOUND) THEN
DBMS_OUTPUT.PUT_LINE(‘有数据’);
END IF;
END;
这段代码中是否使用了游标,如果使用了,使用的是什么类型的游标
A 使用了游标,游标类型为参数游标
B 使用了游标,游标类型为式游标
C 使用了游标,游标类型为ref 游标
D 这段代码中根本没有使用到游标
15. 下列哪个游标的定义是正确的
A TYPE CURSOR EMPCUR IS SELECT * FROM EMP;
B TYPE EMPCUR IS CURSOR OF SELECT * FROM EMP;;
C CURSOR EMPCUR IS SELECT * FROM EMP;
D TYPE EMPCUR IS REF CURSOR AS SELECT * FROM EMP;
16 在存储过程中,参数模式有哪几种
A IN、OUT
B IN、OUT、IN OUT
C INPUT、OUTPUT
D OUT INOUT
17 关于存储过程返回值的类型,说法对的是
A 只能是基本类型
B 可以是任何类型
C 只能是 NUMBER VARCHAR2 DATE BOOLEAN
D 可以使基本类型和用户类型
18 存储过程和函数的区别是
A 过程可以返回多个值,而函数只能返回一个值
B 函数可以作为PLSQL表达式的一部分,而过程不能
C 函数可以返回多个值,过程只能返回一个
D 函数和过程都必须包含RETURN语句
19 过程和函数的重载,正确的是
A Oracle中过程和函数不能重载
B Oracle中的过程和函数只有在包中存在时,才能被重载
C Oracle中的过程和函数随时随地都可以被重载
D 函数可以重载,过程不能被重载
20 Oracle中程序包的特点是
A 可以写函数和过程
B 任何能够定义在声明部分的内容,都可以出现在包中,包就是用来对代码进行封装的
C 包是一个可选结构,其中只能定义函数和过程
D 定义在包中的过程和函数不能被外部代码所访问
21 下面关于保的说法错误的是
A 有包头,就必须有包体
B 包可分为包头和包体两部分,但包体不是必须的
C 如果只用函数和过程,则可以只有包体,没有包头
D 包可以继承
22 阅读代码,函数被正确重载是
A CREATE OR REPLACE PACKAGE TESTPACKAGE AS
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2)
RETURN BOOLEAN;
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 IN OUT VARCHAR2)
RETURN BOOLEAN;
END TESTPACKAGE;
B CREATE OR REPLACE PACKAGE TESTPACKAGE AS
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2);
RETURN BOOLEAN;
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM3 OUT VARCHAR2);
RETURN VARCHAR2;
END TESTPACKAGE;
C CREATE OR REPLACE PACKAGE TESTPACKAGE AS
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2);
RETURN BOOLEAN
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT NUMBER);
RETURN OBJECT
END TESTPACKAGE;
D CREATE OR REPLACE PACKAGE TESTPACKAGE AS
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2);
RETURN BOOLEAN
FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT CHAR);
RETURN OBJECT
END TESTPACKAGE;
23 触发器有哪些级别
A 行级触发器和字段级触发器
B 行级触发器
C 语句及触发器
D行级触发器和语句及触发器
26 触发器有哪些种类
A BEFORE和AFTER
B BEFORE 和BEFORE ROW
C AFTER 和AFTER STATEMENT
D FOR EACH ROW和FOR EACH STATEMENT
27 触发器的执行过程是
A 行前(多次)、语句前(多次)、行后(多次)、语句后(一次)
B 语句前(一次)、行前(多次)、字段有效验证、行后(多次)、语句后(一次)
C语句前(一次)、语句后(一次)、行前(多次)、行后(多次)
D行前(多次)、行后(多次)、语句前(一次)、语句后(一次)
28 触发器的动作有哪几个
A INSERT、UPDATE、DELETE
B INSERT、ALTER、DROP
C UPDATE、CREATE
D REMOVE、INSERT、DELETE
29 看代码
CREATE OR REPLACE TRIGGER STUDENTUPDATEINFO
AFTER INSERT OR UPDATE OR DELETE ON STUDENT
FOR EACH ROW
WHEN (NEW.STUID IS NOT NULL OR OLD.STUID IS NOT NULL)
BEGIN
CASE
WHEN INSERTING THEN
DBMS_OUTPUT.PUT_LINE(:NEW.STUNAME);
DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME);
DBMS_OUTPUT.NEW_LINE();
DBMS_OUTPUT.PUT_LINE(‘STUDENT表增加一条信息!!!’);
WHEN UPDATING THEN
DBMS_OUTPUT.PUT_LINE(:NEW.STUNAME);
DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME);
DBMS_OUTPUT.NEW_LINE();
DBMS_OUTPUT.PUT_LINE(‘STUDENT表更新一条信息!!!’);
ELSE
DBMS_OUTPUT.PUT_LINE(:NEW.STUNAME);
DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME);
DBMS_OUTPUT.NEW_LINE();
DBMS_OUTPUT.PUT_LINE(‘STUDENT表删除一条信息!!!’);
END CASE;
END;
当执行了以下命令后
INSERT INTO STUDENT VALUES(‘STU0010′,’TOM’,’TB007′,’JAVA’);
UPDATE SET CALSSNAME=’ORACLE’ WHERE STUID=’STU0010′;
DELETE STUDENT WHERE STUID=’STU0010′
输出结果为:
A INSERT后输出: TOM TOM STUDENT表增加一条信息!!!
UPDATE后输出: TOM TOM STUDENT表更新一条信息!!
DELETE后输出: TOM TOM STUDENT表删除一条信息!!!
B INSERT后输出: TOM STUDENT表增加一条信息!!!
UPDATE后输出: TOM TOM STUDENT表更新一条信息!!
DELETE后输出: TOM STUDENT表删除一条信息!!!
C INSERT后输出: TOM TOM STUDENT表增加一条信息!!!
UPDATE后输出: TOM STUDENT表更新一条信息!!!
DELETE后输出: TOM STUDENT表删除一条信息!!!
D INSERT后输出: TOM STUDENT表增加一条信息!!!
UPDATE后输出: TOM TOM STUDENT表更新一条信息!!
DELETE后输出: STUDENT表删除一条信息!!!
(责任编辑:IT)
1 PL/SQL代表 A PROCEDURAL LANGUAGE/SQL B PROGRAM LANGUAGE SQL C POWER LANGUAGE SQL D 都不对 2 _____引擎执行PL/SQL块 A SQL B PL/SQL C ORACLE D 都不对 3 一个对象可以呈现多种形式的能力称为 A 多态 B 继承 C 封装 D 以上都不对 4 PLSQL块是由哪几个部分组成 A DECLARE BEGIN END B BEGIN END C EXCEPTION BEGIN END D DECLARE BEGIN EXCEPTION END 5 看下面代码,正确的是 A DECLARE DBMS_OUTPUT.PUT_LINE(‘定义部分’); BEGIN DBMS_OUTPUT.PUT_LINE(‘语句部分’); END; B BEGIN NUM NUMBER:=100; DBMS_OUTPUT.PUT_LINE(‘NUM 的值为:’||NUM); END; C DECLARE NUM NUMBER:=100; BEGIN NUM:=NUM+NUM/2; DBMS_OUTPUT.PUT_LINE(‘NUM 的值为:’||NUM); END; D BEGIN NUM NUMBER:=100; DECLARE NUM:=NUM+NUM/2; DBMS_OUTPUT.PUT_LINE(‘NUM 的值为:’||NUM); END; 6 看下面语句正确的是 A IF(N%M=0) THEN DBMS_OUTPUT.PUT_LINE(‘这是一个偶数’); ELSEIF(N%M=1) THEN DBMS_OUTPUT.PUT_LINE(‘这是一个奇数’); END IF; B DECLARE VAR NUMBER:=0; BEGIN VAR:=&V; CASE WHEN VAR=1 THEN DBMS_OUTPUT.PUT_LINE(‘A’); WHEN VAR=2 THEN DBMS_OUTPUT.PUT_LINE(‘B’); ELSE DBMS_OUTPUT.PUT_LINE(‘O’); END CASE; END; C DECLARE I NUMBER:=0; BEGIN FOR I IN 10..20 LOOP DBMS_OUTPUT.PUT_LINE(I); END LOOP; END; D LOOP DBMS_OUTPUT.PUT_LINE(I); END LOOP; 7. 当在一个PLSQL块中通过查询得到一个值,但是没有任何值返回时,会产生异常吗?如果产生,是什么异常? A 不会有异常,只不过没有结果而已 B 有异常,异常为No_data_found C 有异常,异常为Value_erro D 编译都不通过 8. 在PLSQL块中处理异常的语句是 A EXCEPTION IF EXCEPTION_NAME THEN DBMS_OUTPUT.PUT_LINE(); END; B EXCEPTION WHEN EXCEPTION_NAME THEN DBMS_OUTPUT.PUT_LINE(); END EXCEPTION ; C WHEN EXCEPTION_NAME THEN DBMS_OUTPUT.PUT_LINE(); D BEGIN NULL; EXCEPTION WHEN EXCEPTION_NAME THEN DBMS_OUTPUT.PUT_LINE(); END ; 9. 当用户在PLSQL块中,像抛出自定义异常或者是系统异常时,所使用的关键字是 A THROW B RAISE C RAISE_APPLICATION_ERROR D EXCEPTION 10. 在自定义异常中,用户可用的错误号范围在 A 20000 ~ 29999 B -20000 ~ -20999 C 1~65535 D 没有限制 11. 阅读代码 DECLARE BEGIN DBMS_OUTPUT.PUT_LINE(‘外不快’); DECLARE MYEXCE EXCEPTION; BEGIN RAISE MYEXCE; END; EXCEPTION WHEN MYEXCE THEN DBMS_OUTPUT.PUT_LINE(‘异常捕获’); END; 出现的结果是 A 编译时报错 PLS-00201: 必须说明标识符 ‘MYEXCE’ B 运行时报错,在外部无法捕获到内部异常 C 可以正常执行 D 编译时报错,PLSQL块不能嵌套 12. 使用游标的步骤,有哪几步 A 打开游标、使用游标、关闭游标 B 定义游标、打开游标、使用游标、关闭游标 C 定义游标、使用游标、关闭游标 D 定义游标、打开游标、使用游标、 13 游标有哪几种类型 A 静态游标、动态游标 B 隐式游标、显示游标 C 变量游标、常量游标 D 参数游标、ref 游标 14 阅读下列代码 DECLARE TOTALEMP NUMBER; BEGIN SELECT COUNT(*) INTO TOTALEMP FROM EMP; IF(SQL%FOUND) THEN DBMS_OUTPUT.PUT_LINE(‘有数据’); END IF; END; 这段代码中是否使用了游标,如果使用了,使用的是什么类型的游标 A 使用了游标,游标类型为参数游标 B 使用了游标,游标类型为式游标 C 使用了游标,游标类型为ref 游标 D 这段代码中根本没有使用到游标 15. 下列哪个游标的定义是正确的 A TYPE CURSOR EMPCUR IS SELECT * FROM EMP; B TYPE EMPCUR IS CURSOR OF SELECT * FROM EMP;; C CURSOR EMPCUR IS SELECT * FROM EMP; D TYPE EMPCUR IS REF CURSOR AS SELECT * FROM EMP; 16 在存储过程中,参数模式有哪几种 A IN、OUT B IN、OUT、IN OUT C INPUT、OUTPUT D OUT INOUT 17 关于存储过程返回值的类型,说法对的是 A 只能是基本类型 B 可以是任何类型 C 只能是 NUMBER VARCHAR2 DATE BOOLEAN D 可以使基本类型和用户类型 18 存储过程和函数的区别是 A 过程可以返回多个值,而函数只能返回一个值 B 函数可以作为PLSQL表达式的一部分,而过程不能 C 函数可以返回多个值,过程只能返回一个 D 函数和过程都必须包含RETURN语句 19 过程和函数的重载,正确的是 A Oracle中过程和函数不能重载 B Oracle中的过程和函数只有在包中存在时,才能被重载 C Oracle中的过程和函数随时随地都可以被重载 D 函数可以重载,过程不能被重载 20 Oracle中程序包的特点是 A 可以写函数和过程 B 任何能够定义在声明部分的内容,都可以出现在包中,包就是用来对代码进行封装的 C 包是一个可选结构,其中只能定义函数和过程 D 定义在包中的过程和函数不能被外部代码所访问 21 下面关于保的说法错误的是 A 有包头,就必须有包体 B 包可分为包头和包体两部分,但包体不是必须的 C 如果只用函数和过程,则可以只有包体,没有包头 D 包可以继承 22 阅读代码,函数被正确重载是 A CREATE OR REPLACE PACKAGE TESTPACKAGE AS FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2) RETURN BOOLEAN; FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 IN OUT VARCHAR2) RETURN BOOLEAN; END TESTPACKAGE; B CREATE OR REPLACE PACKAGE TESTPACKAGE AS FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2); RETURN BOOLEAN; FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM3 OUT VARCHAR2); RETURN VARCHAR2; END TESTPACKAGE; C CREATE OR REPLACE PACKAGE TESTPACKAGE AS FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2); RETURN BOOLEAN FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT NUMBER); RETURN OBJECT END TESTPACKAGE; D CREATE OR REPLACE PACKAGE TESTPACKAGE AS FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2); RETURN BOOLEAN FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT CHAR); RETURN OBJECT END TESTPACKAGE; 23 触发器有哪些级别 A 行级触发器和字段级触发器 B 行级触发器 C 语句及触发器 D行级触发器和语句及触发器 26 触发器有哪些种类 A BEFORE和AFTER B BEFORE 和BEFORE ROW C AFTER 和AFTER STATEMENT D FOR EACH ROW和FOR EACH STATEMENT 27 触发器的执行过程是 A 行前(多次)、语句前(多次)、行后(多次)、语句后(一次) B 语句前(一次)、行前(多次)、字段有效验证、行后(多次)、语句后(一次) C语句前(一次)、语句后(一次)、行前(多次)、行后(多次) D行前(多次)、行后(多次)、语句前(一次)、语句后(一次) 28 触发器的动作有哪几个 A INSERT、UPDATE、DELETE B INSERT、ALTER、DROP C UPDATE、CREATE D REMOVE、INSERT、DELETE 29 看代码 CREATE OR REPLACE TRIGGER STUDENTUPDATEINFO AFTER INSERT OR UPDATE OR DELETE ON STUDENT FOR EACH ROW WHEN (NEW.STUID IS NOT NULL OR OLD.STUID IS NOT NULL) BEGIN CASE WHEN INSERTING THEN DBMS_OUTPUT.PUT_LINE(:NEW.STUNAME); DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME); DBMS_OUTPUT.NEW_LINE(); DBMS_OUTPUT.PUT_LINE(‘STUDENT表增加一条信息!!!’); WHEN UPDATING THEN DBMS_OUTPUT.PUT_LINE(:NEW.STUNAME); DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME); DBMS_OUTPUT.NEW_LINE(); DBMS_OUTPUT.PUT_LINE(‘STUDENT表更新一条信息!!!’); ELSE DBMS_OUTPUT.PUT_LINE(:NEW.STUNAME); DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME); DBMS_OUTPUT.NEW_LINE(); DBMS_OUTPUT.PUT_LINE(‘STUDENT表删除一条信息!!!’); END CASE; END; 当执行了以下命令后 INSERT INTO STUDENT VALUES(‘STU0010′,’TOM’,’TB007′,’JAVA’); UPDATE SET CALSSNAME=’ORACLE’ WHERE STUID=’STU0010′; DELETE STUDENT WHERE STUID=’STU0010′ 输出结果为: A INSERT后输出: TOM TOM STUDENT表增加一条信息!!! UPDATE后输出: TOM TOM STUDENT表更新一条信息!! DELETE后输出: TOM TOM STUDENT表删除一条信息!!! B INSERT后输出: TOM STUDENT表增加一条信息!!! UPDATE后输出: TOM TOM STUDENT表更新一条信息!! DELETE后输出: TOM STUDENT表删除一条信息!!! C INSERT后输出: TOM TOM STUDENT表增加一条信息!!! UPDATE后输出: TOM STUDENT表更新一条信息!!! DELETE后输出: TOM STUDENT表删除一条信息!!! D INSERT后输出: TOM STUDENT表增加一条信息!!! UPDATE后输出: TOM TOM STUDENT表更新一条信息!! DELETE后输出: STUDENT表删除一条信息!!! (责任编辑:IT) |