数据库面试题-Oracle部分


Q:
什么是存储过程,使用存储过程的好处?

存储过程(Stored Procedure )是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户
通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
优点:

  • 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。
  • 允许更快执行,如果某操作需要执行大量 SQL 语句或重复执行,存储过程比 SQL 语句执行的要快。
  • 减少网络流量,例如一个需要数百行的 SQL 代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。
  • 好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

Q:
Oracle 存储过程怎么创建?

存储过程创建语法:

create or replace procedure 存储过程名(param1 in type,param2 out type)as变量 1 类型(值范围);变量 2 类型(值范围);Begin Select count(*) into 变量 1 from 表 A where 列名=param1; If (判断条件) then   Select 列名 into 变量 2 from 表 A where 列名=param1;   Dbms_output Put_line(‘打印信息’); Elsif (判断条件) then   Dbms_output Put_line(‘打印信息’); Else   Raise 异常名(NO_DATA_FOUND); End if;Exception When others then   Rollback;End;

注意事项:

  1. 存储过程参数不带取值范围,in 表示传入,out 表示输出
  2. 变量带取值范围,后面接分号
  3. 在判断语句前最好先用 count(*)函数判断是否存在该条操作记录
  4. 用 select …into…给变量赋值
  5. 在代码中抛异常用 raise+异常名

Q:
Oracle 中是如何进行分页查询的?

Oracle 中使用 rownum 来进行分页,这个是效率最好的分页方法,hibernate 也是使用 rownum 来进行 Oralce分页的

select * from   (select rownum r,a from tableName where rownum <= 20)where r>10

Q:
Oracle中function和procedure的区别?

1、可以理解函数是存储过程的一种

2、函数可以没有参数,但是一定需要一个返回值;存储过程可以没有参数,不需要返回值

3、函数return返回值没有返回参数模式,存储过程通过out参数返回值,如果需要返回多个参数则建议使用存储过程

4、在sql数据操纵语句中只能调用函数而不能调用存储过程

Q:
Oracle 中字符串用什么连接?

使用 || 符号连接字符串, 如 ‘abc’ || ‘d’ 的结果是 abcd。

Q:
存储过程和存储函数的特点和区别?

特点:

  • 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
  • 对于存储过程来说可以返回参数,而函数只能返回或者表对象
  • 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于 FROM 关键字的后面。

区别:

  • 函数必须有返回值;而过程没有
  • 函数可以单独执行;而过程必须通过 execute 执行
  • 函数可以嵌入到 SQL 语句中执行;而过程不行

我们可以将比较复杂的查询写成函数,然后到存储过程中去调用这些函数

Q:
如何使用 Oracle 的游标?

Oracle 中的游标分为显示游标隐式游标
显示游标:
显示游标是用 cursor...is 命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;
显式游标的操作:打开游标、操作游标、关闭游标;

隐式游标:
隐式游标是在执行插入 (insert)删除(delete)修改(update)和返回单条记录的查询(select)语句时由 PL/SQL 自动定义的。
PL/SQL 隐式地打开 SQL 游标,并在它内部处理 SQL语句,然后关闭它。