甲骨文顶级面试问题:甲骨文基础、SQL、PL/SQL问题

最常见的Oracle面试问题和答案:

前40个甲骨文面试问题及答案,几乎涵盖了甲骨文的所有基本概念。

这是一个深入的系列,涵盖了几乎所有的Oracle面试问题:

第一部分: Oracle基础、SQL、PL/SQL问题(本文)

第二部分: Oracle DBA、RAC和性能调优问题

第三部分: Oracle表单和报告面试问题

第四部分: 甲骨文应用程序和甲骨文SOA技术面试问题

让我们从该系列的第一篇文章开始。

本文涉及的问题类型:

  • 基本的Oracle面试问题
  • Oracle SQL面试问题
  • Oracle PL/SQL面试问题

如果你打算参加甲骨文面试,本文所涉及的这些问题肯定会对你有很大帮助。

让我们继续前进!!!!

顶尖的Oracle面试问题列表

问题#1)什么是Oracle,它有哪些不同的版本?

答案是: 甲骨文是甲骨文公司提供的流行数据库之一,它基于关系管理概念工作,因此也被称为甲骨文RDBMS。 它被广泛用于在线交易处理、数据仓库和企业网格计算。

问题#2)你将如何识别Oracle数据库软件版本?

答案是: 甲骨文的每一个版本都遵循一些格式。

举例来说 ,

10.1.0.1.1版可被称为:

10: 主要的数据库版本号

1: DB维护版本号

0: 应用服务器版本号

1: 特定组件的发布号

1: 特定平台的发行号

Q #3) 你将如何区分VARCHAR & VARCHAR2?

答案是: VARCHAR & VARCHAR2都是Oracle的数据类型,用于存储可变长度的字符串。 它们的区别在于:

  • VARCHAR可以存储多达2000字节的字符,而VARCHAR2可以存储多达4000字节。
  • VARCHAR将保留声明时定义的字符的空间,即使它们没有被全部使用,而VARCHAR2将释放未使用的空间。

Q #4) TRUNCATE & DELETE命令的区别是什么?

答案是: 这两条命令都是用来从数据库中删除数据的。

两者之间的区别包括:

  • TRUNCATE是一个DDL操作,而DELETE是一个DML操作。
  • TRUNCATE删除了所有的行,但保留了表的结构,它不能回滚,因为它在命令执行前后都会发出COMMIT,而DELETE命令可以回滚。
  • TRUNCATE命令将释放对象的存储空间,而DELETE命令则不会。
  • 与DELETE相比,TRUNCATE更快。

问题#5) RAW数据类型是什么意思?

答案是: RAW数据类型用于存储可变长度的二进制数据或字节字符串。

RAW & VARCHAR2数据类型的区别在于,PL/SQL不承认这种数据类型,因此,当RAW数据被传输到不同的系统时,不能做任何转换。 这种数据类型只能被查询或插入到表中。

语法: RAW (精确)

问题#6)什么是连接? 列出连接的类型。

答案是: 连接是用来使用一些共同的列或条件从多个表中提取数据。

有各种类型的连接,如下所列:

  • INNER JOIN
  • OUTER JOIN
  • CROSS JOINS 或 CARTESIAN PRODUCT
  • EQUI JOIN
  • 反式联接
  • 半数以上

问题#7)SUBSTR & INSTR函数之间的区别是什么?

答案是:

  • SUBSTR函数从提供的字符串中返回由数值识别的子部分。
    • 举例来说 , [SELECT SUBSTR ('India is my country, 1, 4) from dual] 将返回 "Indi"。
  • INSTR将返回字符串中的子字符串的位置号。
    • 举例来说 , [SELECT INSTR ('India is my country, 'a') from dual] 将返回5。

问题#8)我们如何才能找出Oracle表中的重复值?

答案是: 我们可以使用下面的示例查询来获取重复的记录。

 SELECT EMP_NAME, COUNT (EMP_NAME) FROM EMP GROUP BY EMP_NAME HAVING COUNT (EMP_NAME)> 1; 

问题#9) ON-DELETE-CASCADE语句是怎样的? 工作?

答案是: 使用ON DELETE CASCADE将自动删除子表中的记录,当同样的记录从父表中删除时。 这个语句可以与外键一起使用。

我们可以使用下面这组命令将ON DELETE CASCADE选项添加到一个现有的表中。

语法:

 alter table child_t1 add constraint child_parent_fk references parent_t1 (column1) on delete cascade; 

问题#10)什么是NVL函数? 如何使用它?

答案是: NVL是一个函数,帮助用户在遇到表达式为空的情况下进行数值替换。

它可以像下面的语法一样使用。

 NVL (Value_In, Replace_With) 

问题#11) 主键和唯一键之间有什么区别?

答案是: 主键用于唯一地识别每条表行,而唯一键则防止表列中出现重复值。

以下是一些区别:

  • 主键在表中只能是一个,而唯一键可以是多个。
  • 主键完全不能容纳空值,而唯一键允许多个空值。
  • 主键是一个聚类索引,而唯一键是一个非聚类索引。

问题#12) TRANSLATE命令与REPLACE有什么不同?

答案是: TRANSLATE命令将提供的字符串中的字符逐一翻译成替换字符。 REPLACE命令将用一个完整的替换字符串替换一个或一组字符。

比如说:

 TRANSLATE ('Missisippi','is','15) => M155151pp1 REPLACE ('Missisippi', 'is', '15) => M15s15ippi 

问题#13)我们如何才能在Oracle中找到当前的日期和时间?

答案是: 我们可以使用Oracle的SYSDATE命令找到当前的日期& 时间。

语法:

 SELECT SYSDATE into CURRENT_DATE from dual; 

问题#14)为什么我们在Oracle中使用COALESCE函数?

答案是: COALESCE函数用于从表达式中提供的参数列表中返回第一个非空的表达式。 一个表达式中必须至少有两个参数。

语法:

 COALESCE (expr 1, expr 2, expr 3...expr n) 

问题#15)你将如何写一个查询,从表STUDENT_REPORT中获得第5个RANK学生?

答:查询结果如下:

 select top 1 rank from (select top 5 rank from student_report order by rank desc) as student order by rank asc; 

Q #16) 在SQL查询中何时使用GROUP BY子句?

答案是: GROUP BY子句用于在查询结果中按一个或多个列识别和分组数据。 该子句经常与COUNT、MAX、MIN、SUM、AVG等聚合函数一起使用。

语法:

 SELECT COLUMN_1, COLUMN_2 FROM TABLENAME WHERE [condition] GROUP BY COLUMN_1, COLUMN_2 

问题#17)从一个表中获取数据的最快方法是什么?

答案是: 获取数据的最快速方法是在SQL查询中使用ROWID。

问题#18) 我们在哪里使用DECODE和CASE语句?

答案是: DECODE & CASE语句的功能与IF-THEN-ELSE语句类似,它们是彼此的替代品。 这些函数在Oracle中用于转换数据值。

比如说:

DECODE功能

 选择 ORDERNUM, DECODE (STATUS, 'O', 'ORDERED', 'P', 'PACKED, 'S', 'SHIPPED', 'A', 'ARRIVED') FROM ORDERS; 

案例 职能

 选择 ORDERNUM , CASE (WHEN STATUS ='O' then 'ORDERED' WHEN STATUS ='P' then PACKED WHEN STATUS ='S' then 'SHIPPED' ELSE 'ARRIVED') END FROM ORDERS; 

这两个命令都会显示订单号及其各自的状态、

如果、

状态 O= 已订购

状态 P= 已包装

状态S=已发货

状态A=已到达

问题#19)为什么我们在数据库中需要完整性约束?

答案是: 完整性约束要求执行业务规则,以保持数据库的完整性,并防止无效数据进入表。 在下面提到的约束的帮助下,表之间可以保持关系。

有各种完整性约束,包括主键、外键、UNIQUE KEY、NOT NULL & CHECK。

问题#20)Oracle中的MERGE是什么意思,我们如何合并两个表?

答案是: MERGE语句用于合并两个表中的数据,它从源表中选择数据,并根据MERGE查询中提供的条件,将其插入/更新到另一个表中。

语法:

 使用source_table_1在搜索条件下合并到target_table_1,当匹配时,插入(col_1, col_2...)值(val_1, val_2...),其中  当不匹配时,更新设置col_1=val_1, col_2=val_2... 当  

问题#21)Oracle中聚合函数的用途是什么?

答案是: 聚合函数对一组数值进行汇总运算,以提供一个单一的数值。 在我们的代码中,有几个聚合函数被用来进行计算。 这些是:

  • AVG
  • 规模
  • COUNT
  • 累计
  • STDEV

问题#22)集合运算符UNION, UNION ALL, MINUS & INTERSECT的作用是什么?

答案是: 如果源表中的列和相对数据类型相同,集合运算符可以帮助用户一次从两个或两个以上的表中获取数据。

  • 联 盟 操作符返回两个表中的所有行,除了重复的行。
  • 所有联队 返回两个表中的所有行以及重复的行。
  • 减负 返回第一个表中的行,这些行在第二个表中不存在。
  • INTERSECT 只返回两个表中的共同行。

问题#23)我们能否在Oracle中把日期转换为char,如果可以,语法是什么?

答案是: 我们可以使用TO_CHAR函数来完成上述转换。

语法:

 SELECT to_char (to_date ('30-01-2018', 'DD-MM-YYY'), 'YYYYY-MM-DD') FROM dual; 

问题#24)你说的数据库事务&是什么意思;在Oracle中所有的TCL语句是什么?

答案是: 当一组SQL语句被一次性执行时,就会发生事务。 为了控制这些语句的执行,Oracle引入了TCL即事务控制语句,使用一组语句。

这套报表包括:

  • 承诺: 用于使一项交易永久化。
  • 回滚: 用来回滚DB的状态到最后的提交点。
  • 储蓄点: 有助于指定一个事务点,以后可以对其进行回滚。

问题#25)你对数据库对象的理解是什么? 你能列出其中的几个吗?

答案是: 用于在数据库中存储数据或引用数据的对象被称为数据库对象。 数据库由各种类型的DB对象组成,如表、视图、索引、约束、存储程序、触发器等。

问题#26)什么是嵌套表,它与普通表有什么不同?

答案是: 嵌套表是一个数据库集合对象,它可以作为表的一个列存储。 在创建普通表的同时,整个嵌套表可以在一个列中被引用。 嵌套表只有一个列,没有行数的限制。

比如说:

 创建表emp ( emp_id number, emp_name type_name) 

在这里,我们正在创建一个普通的表EMP,并引用一个嵌套表TYPE_NAME作为列。

问题#27)我们能否在数据库中保存图像,如果可以,如何保存?

答案是: BLOB是二进制大对象的缩写,是一种数据类型,一般用于保存图像、音频&;视频文件或一些二进制可执行文件。 这种数据类型的容量最大可达4GB。

问题#28)你对数据库模式的理解是什么,它有什么作用?

答案是: 模式是数据库用户拥有的数据库对象的集合,用户可以在这个模式中创建或操作新的对象。 模式可以包含任何数据库对象,如表、视图、索引、集群、存储程序、函数等。

问题#29)什么是数据字典,如何创建它?

答案是: 每当一个新的数据库被创建时,系统就会创建一个数据库特定的数据字典。 这个字典由SYS用户拥有,并维护所有与数据库有关的元数据。 它有一组只读的表和视图,它被物理地存储在SYSTEM表空间。

问题#30)什么是视图,它与表有什么不同?

答案是: 视图是一个用户定义的数据库对象,用于存储SQL查询的结果,以后可以引用。 视图并不在物理上存储这些数据,而是作为一个虚拟表,因此它可以被称为逻辑表。

视图与表格不同:

  • 一个表可以保存数据,但不能保存SQL查询结果,而视图可以保存查询结果,可以在另一个SQL查询中作为一个整体使用。
  • 表可以被更新或删除,而视图则不能这样做。

问题#31)什么是僵局情况?

答案是: 死锁是指两个或更多的用户同时等待数据的情况,而这些数据被对方锁定。 因此,它导致所有的用户会话被封锁。

问题#32)什么是索引?

答案是: 索引是一个模式对象,它的创建是为了在表中有效地搜索数据。 索引通常是在表的某些列上创建的,这些列被访问得最多。 索引可以是聚类的,也可以是非聚类的。

问题33)什么是Oracle数据库中的ROLE?

答案是: 给予单个用户访问单个对象的权限是一项艰巨的管理任务。 为了使这项工作变得简单,在数据库中创建了一组共同的权限,这就是所谓的ROLE。 ROLE一旦创建,可以通过使用GRANT & REVOKE命令分配给用户或撤销。

语法:

 创建角色read_table_role;将select on emp授予read_table_role;授予read_table_role给user1;撤销user1的read_table_role; 

问题#34)CURSOR中的属性是什么?

答:一个CURSOR有如下的各种属性:

(i) %FOUND :

  • 如果游标已经被声明但被关闭,返回INVALID_CURSOR。
  • 如果没有发生获取,但游标是开放的,则返回NULL。
  • 如果成功获取了行,返回TRUE,如果没有返回行,返回FALSE。

(ii) 未找到 :

  • 如果游标已经被声明但被关闭,返回INVALID_CURSOR。
  • 如果没有发生获取,但游标是开放的,则返回NULL。
  • 如果成功获取了行,则返回FALSE;如果没有返回行,则返回TRUE。

(iii) %ISOPEN : 如果游标是开放的,返回TRUE,否则返回FALSE。

(iv) %ROWCOUNT : 返回获取的行的数量。

问题#35)为什么我们在PLSQL中使用%ROWTYPE & %TYPE?

答案是: %ROWTYPE & %TYPE是PL/SQL中的属性,可以继承数据库中定义的表的数据类型。 使用这些属性的目的是为了提供数据独立性和完整性。

如果任何数据类型或精度在数据库中被改变,PL/SQL代码会自动更新为改变的数据类型。

%TYPE用于声明一个需要与表列具有相同数据类型的变量。

而%ROWTYPE将被用来定义一个完整的记录行,其结构与表的结构相似。

问题#36)为什么我们要在PL/SQL中创建存储过程& 函数,它们有什么不同?

答案是: 存储过程是一组为执行特定任务而编写的SQL语句。 这些语句可以作为一个组保存在数据库中,并有一个指定的名称,如果有访问权限,可以与不同的程序共享。

函数又是为执行特定任务而编写的子程序,但两者之间存在着差异。

存储程序 职能

存储过程可能会也可能不会返回一个值,而且也可以返回多个值。 函数将始终只返回单一的值。
存储程序可以包括DML语句,如插入、更新和删除。 我们不能在一个函数中使用DML语句。
存储程序可以调用函数。 函数不能调用存储过程。
存储程序支持使用Try/Catch块进行异常处理。 函数不支持Try/Catch块。

问题#37)我们可以通过存储过程传递哪些参数?

答案是: 我们可以通过存储过程传递IN, OUT & INOUT参数,它们应该在声明存储过程本身时被定义。

问题#38)什么是触发器,其类型有哪些?

答案是: 触发器是一个存储程序,它的编写方式是当某些事件发生时自动执行。 这个事件可以是任何DML或DDL操作。

PL/SQL支持两种类型的触发器:

  • 行级
  • 声明级别

问题#39)你将如何区分PL/SQL中的全局变量和局部变量?

答案是: 全局变量是指在程序开始时定义的变量,它一直存在到程序结束。 它可以被程序中的任何方法或程序访问,而对局部变量的访问只限于它被声明的程序或方法。

问题#40)PL SQL中的包是什么?

答案是: 包是一组相关的数据库对象,如存储程序、函数、类型、触发器、游标等,它们存储在Oracle数据库中。 它是一种相关对象的库,如果允许的话,可以被多个应用程序访问。

PL/SQL包结构由2部分组成:包的规格&;包的主体。

总结

我希望上述一组问题能帮助你了解甲骨文的全部内容。

即使你对所有的基本概念都有透彻的了解,你在面试中的表现方式也很重要。 因此,要保持冷静,自信地面对面试,不要有任何犹豫。

阅读下一页 第2部分:Oracle DBA、RAC和性能调优问题

我们祝愿你们一切顺利!"!

推荐阅读

    滚动到顶部