PL/SQL 面试问题2025年4月26日 | 阅读 8 分钟 PL/SQL 是 SQL 的高级版本。这里列出了一些顶级的 PL/SQL 面试问题及答案。 1) 什么是 PL/SQL?PL/SQL 是 SQL 的过程语言扩展。它同时支持过程式编程语言和 SQL 的特性。它由 Oracle 公司在 90 年代初开发,用于增强 SQL 的功能。 2) 使用 PL/SQL 的目的是什么?PL/SQL 是 SQL 的扩展。SQL 是非过程式的,而 PL/SQL 是 Oracle 设计的过程式语言。它被发明出来是为了克服 SQL 的局限性。 3) PL/SQL 最重要的特点是什么?以下是一些值得注意的特点:
4) 什么是 PL/SQL 表?它有什么用途?类型为表的对象称为 PL/SQL 表,它们被建模为数据库表。我们也可以说 PL/SQL 表是提供数组的一种方式。数组就像内存中的临时表,处理速度非常快。PL/SQL 表用于移动批量数据。它们简化了数据的集合移动。 5) PL/SQL 中有哪些数据类型?PL/SQL 中有两种类型的数据类型:
6) PL/SQL 的基本结构是什么?PL/SQL 使用块结构作为其基本结构。每个 PL/SQL 程序都由 SQL 和 PL/SQL 语句组成,这些语句构成一个 PL/SQL 块。 PL/SQL 块包含 3 个部分:
7) FUNCTION、PROCEDURE 和 PACKAGE 在 PL/SQL 中有什么区别?函数 (Function):PL/SQL 函数的主要目的是计算并返回单个值。函数在其规范中具有返回类型,并且必须返回指定类型的值。 过程 (Procedure):过程没有返回类型,也不应返回任何值,但它可以有一个 RETURN 语句,该语句仅停止其执行并返回给调用者。过程用于返回多个值,否则它通常与函数类似。 包 (Package):包是模式对象,它将逻辑上相关的 PL/SQL 类型、项和子程序分组。你也可以说它是一组函数、过程、变量和记录类型语句。它提供了模块化,这种功能有助于应用程序开发。它用于隐藏信息,防止未经授权的用户访问。 8) 什么是异常?异常有哪些类型?异常是 PL/SQL 的错误处理部分。有两种类型的异常:预定义异常和用户定义异常。 9) 如何编写一个单条语句,将单词 "Hello" 和 "World" 连接起来,并将结果赋给名为 Greeting 的变量?Greeting := 'Hello' || 'World'; 10) PL/SQL 支持 CREATE 命令吗?不支持。PL/SQL 不支持 CREATE 等数据定义命令。 11) 写出一个函数和存储过程之间的唯一区别。函数返回一个值,而存储过程不返回任何值。 12) 异常与错误有什么区别?当发生错误时,就会出现异常。错误是 bug,而异常是警告或错误情况。 13) 使用索引的主要原因是什么?更快地访问表中的数据块。 14) 什么是 PL/SQL 异常?请举出其中三个。
15) 如何声明一个用户定义的异常?你可以在 DECLARE 部分,使用 EXCEPTION 关键字来声明用户定义的异常。 语法 16) PL/SQL 中有哪些预定义的异常?以下是 PL/SQL 中预定义异常的列表:
17) 什么是 PL/SQL 中的触发器?触发器是一个存储在数据库中的 PL/SQL 程序。它在执行 INSERT、UPDATE 和 DELETE 命令之前或之后立即执行。 18) 在单个表上可以应用的最大触发器数量是多少?12 个触发器。 19) PL/SQL 中有多少种类型的触发器?PL/SQL 中有 12 种类型的触发器,它们是 BEFORE、AFTER、ROW、TABLE、INSERT、UPDATE、DELETE 和 ALL 关键字的组合。
20) 触发器和存储过程的执行有什么区别?触发器无需用户执行任何操作即可自动执行,而存储过程则需要用户显式调用。 21) 当触发器与视图关联时会发生什么?当触发器与视图关联时,基本表触发器通常会被启用。 22) 触发器中的 WHEN 子句有什么用途?WHEN 子句指定触发器被触发时必须为真的条件。 23) 如何禁用名为 update_salary 的触发器?ALTER TRIGGER update_salary DISABLE; 24) 用什么命令删除触发器?DROP TRIGGER 命令。 25) 在数据库触发器执行时可用的两个虚拟表是什么?表列被称为 THEN.column_name 和 NOW.column_name。 对于 INSERT 相关的触发器,只有 NOW.column_name 的值可用。 对于 DELETE 相关的触发器,只有 THEN.column_name 的值可用。 对于 UPDATE 相关的触发器,两个表列都可用。 26) 什么是存储过程?存储过程是一个语句序列或一个命名 PL/SQL 块,它执行一个或多个特定功能。它类似于其他编程语言中的过程。它存储在数据库中,并且可以重复执行。它作为模式对象存储。它可以是嵌套的、可调用的和参数化的。 27) 可以使用 PL/SQL 创建哪些不同的模式对象?
28) 你对 PL/SQL 游标有什么了解?Oracle 使用工作区来执行 SQL 命令。当 Oracle 处理 SQL 命令时,它会在内存中打开一个称为 Private SQL Area 的区域。这个区域由游标标识。它允许程序员命名这个区域并访问其信息。 29) 隐式游标和显式游标之间有什么区别?隐式游标由 Oracle 隐式声明。这是所有只返回一行数据的 DDL 和 DML 命令的游标。 显式游标是为返回多行的查询创建的。 30) 游标属性 SQL%ROWCOUNT 会返回什么?游标属性 SQL%ROWCOUNT 将返回 SQL 语句处理的行数。 31) 游标属性 SQL%FOUND 会返回什么?如果至少处理了一行,它将返回布尔值 TRUE。 32) 游标属性 SQL%NOTFOUND 会返回什么?如果未处理任何行,它将返回布尔值 TRUE。 33) 你对 PL/SQL 包有什么理解?PL/SQL 包可以被指定为一个文件,该文件在一个地方将函数、游标、存储过程和变量分组。 34) PL/SQL 包有哪些两个不同的部分?PL/SQL 包具有以下两个部分: 规范部分 (Specification part):它指定了定义与应用程序接口的部分。 主体部分 (Body part):这部分指定了定义规范实现的部分。 35) 用什么命令删除一个包?DROP PACKAGE 命令用于删除包。 36) 如何执行存储过程?有两种方法可以执行存储过程: 在 SQL 提示符下,输入 EXECUTE 或 EXEC,后跟过程名。 直接使用过程名。 37) 存储过程有哪些优点?模块化、可扩展性、可重用性、可维护性和一次编译。 38) PL/SQL 中使用的游标属性有哪些?%ISOPEN:它检查游标是否已打开。 %ROWCOUNT:返回由 DML 操作(INSERT、DELETE、UPDATE、SELECT)影响的行数。 %FOUND:它检查游标是否已获取任何行。如果是 - TRUE。 %NOTFOUND:它检查游标是否已获取任何行。如果否 - TRUE。 39) 语法错误和运行时错误有什么区别?语法错误可以轻松被 PL/SQL 编译器检测到。例如:拼写错误等。而运行时错误则通过 PL/SQL 块中的异常处理部分来处理。例如:SELECT INTO 语句,该语句不返回任何行。 40) 解释 COMMIT 语句。对于 COMMIT 语句,以下条件为真:
41) 解释 ROLLBACK 语句。当事务结束时,发出 ROLLBACK 语句。对于 ROLLBACK 语句,以下条件为真:
42) 解释 SAVEPOINT 语句。使用 SAVEPOINT,只能撤销事务的一部分。 43) 什么是“表变更”错误 (mutating table error)?当触发器尝试更新它当前正在使用的行时,会发生“表变更”错误。通过使用视图或临时表可以修复此错误。 44) 什么是数据一致性 (consistency)?数据一致性简单地意味着每个用户都能看到一致的数据视图。 举个例子:有两个用户 A 和 B。A 向 B 的账户转账。此时 A 的账户已更新(借记),但在 B 的账户(贷记)更新之前,其他用户看不到 A 的账户已被借记。在 A 借记和 B 贷记完成后,才能看到更新。这就是数据一致性。 45) 什么是游标,为什么需要它?游标是 SQL 语句执行时在系统内存中创建的临时工作区。 游标包含有关 SELECT 语句及其访问的数据行的信息。这个临时工作区存储从数据库检索的数据并处理这些数据。一个游标可以包含多行,但一次只能处理一行。对于查询,需要游标来单独处理行。 46) PL/SQL 中有多少种游标?PL/SQL 中有两种游标:
|
我们请求您订阅我们的新闻通讯以获取最新更新。