Oracle函数面试题
1.对字符串操作的函数?
答:ASCII() –函数返回字符表达式最左端字符的ASCII 码值
CHR() –函数用于将ASCII 码转换为字符
–如果没有输入0 ~ 255 之间的ASCII 码值CHR 函数会返回一个NULL 值
–应该是必须给chr()赋数字值
concat(str,str)连接两个字符串
LOWER() –函数把字符串全部转换为小写
UPPER() –函数把字符串全部转换为大写
LTRIM() –函数把字符串头部的空格去掉
RTRIM() –函数把字符串尾部的空格去掉
TRIM() –同时去掉所有两端的空格
实际上LTRIM(),RTRIM(),TRIM()是将指定的字符从字符串中裁减掉
其中LTRIM(),RTRIM()的格式为xxxx(被截字符串,要截掉的字符串),但是TRIM()的格式为TRIM(要截掉的一个字符 from 被截的字符串)
SUBSTR() –函数返回部分字符串
INSTR(String,substring) –函数返回字符串中某个指定的子串出现的开始位置,如果不存在则返回0
REPLACE(原来的字符串,要被替换掉的字符串,要替换成的字符串)
SOUNDEX() –函数返回一个四位字符码
–SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回NULL 值
2、事务概念
答案:事务是这样一种机制,它确保多个SQL语句被当作单个工作单元来处理。事务具有以下的作用:
* 一致性:同时进行的查询和更新彼此不会发生冲突,其他用户不会看到发生了变化但尚未提交的数据。
* 可恢复性:一旦系统故障,数据库会自动地完全恢复未完成的事务。
3、oracle中查询系统时间
答:select sysdate from dual
4、触发器的作用,什么时候用触发器,创建触发器的步骤,触发器里是否可以有commit, 为什么?
答案:触发器是可以由事件来启动运行的,存在于数据库服务器中的一个过程。
他的作用:可以实现一般的约束无法完成的复杂约束,从而实现更为复杂的完整性要求。
使用触发器并不存在严格的限定,只要用户想在无人工参与的情况下完成一般的定义约束不可以完成的约束,来保证数据库完整性,那么就可以使用触发器。
由于触发器主要是用来保证数据库的完整性的,所以要创建一个触发器,首先要明确该触发器应该属于那一种(DML,INSTEAD OF,SYSTEM)因为他们各有个的用途;其次就是要确定触发器被触发以后所设计到的数据。
出发器中不可以使用COMMIT。
5.数字函数
abs()绝对值exp(value)e的value次幂ceil()大于等于该值的最小整数floor()小于等于该值的最大整数trunc(value,precision)保留precision个小数截取valueround(value,precision)保留precision个小数对value进行四舍五入 sign()根据值为正负零返回1,-1,0mod()取模操作power(value,exponent)value的exponent次幂sqrt()求平方根
1.初级
4、关系数据库系统与文件数据库系统的区别在那里?关系数据库系统一般适用那些方面?
答案:
关系数据库系统文件系统的区别在于:
首先,关系性数据库的整体数据是结构化的,采用关系数据模型来描述,这是它与文件系统的根本区别。(数据模型包括:数据结构,数据操作以及完整性约束条件)
其次,关系数据库系统的共享性高,冗余低可以面向整个系统,而文件系统则具有应用范围的局限性,不易扩展。
第三,关系数据库系统采用两级映射机制保证了数据的高独立性,从而使得程序的编写和数据都存在很高的独立性。这方面是文件系统无法达到的,它只能针对于某一个具体的应用。(两级映射:保证逻辑独立性的外模式/模式映射和保证物理独立性的内模式/模式映射。外模式:用户模式,是数据库用户的局部数据的逻辑结构特征的描述。模式:数据库全体数据的逻辑结构特征的描述。内模式:也就是数据最终的物理存储结构的描述。)
第四,就是关系性数据库系统由统一的DBMS进行管理,从而为数据提供了如安全性保护,并发控制,完整性检查和数据库恢复服务。
5、触发器的概念,存储过程的概念.
答案:
触发器: 是存储在数据库中的过程,当表被修改(增、删、改)时它隐式地被激发。
存储过程:是数据库语言SQL的集合,同样也存储在数据库中,但是他是由其他应用程序来启动运行或者也可以直接运行。
6、基本SQL语句有哪些.
答案:
select、insert、update、delete、create、drop、truncate
1.中级
8、什么是事务一致性 ? 选择熟悉的数据库实现一个事务处理,如信用卡提款.
答案:
事务的一致性:是事务原子性的体现,事务所对应的数据库操作要么成功要么失败没有第三种情况。事务不管是提交成功与否都不能影响数据库数据的一致性状态。
事务:用户定义的一个数据库操作序列,这些操作要么全部成功完成要么全部不做,是一个不可分割的整体。定义事务的SQL语句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。
事务的原子性:就是事务所包含的数据库操作要么都做,要么都不做.
事务的隔离性:事务对数据的操作不能够受到其他事务的影响。
事务的持续性:也就是说事务对数据的影响是永久的。
对’信用卡提款’这一事务而言就是要保证’提取到现金’和’卡帐号余额’的修改要同时成功或失败.
BEGIN TRANSACTION
读取A的帐户余额BALANCE;
BALANCE=BALANCE-AMOUNT转帐金额;
IF(BALANCE<0) THEN
ROLLBACK;
ELSE
BEGIN
将A的新余额写回;
读取B的帐户余额BALANCEB;
BALANCEB=BALANCEB+AMOUNT转帐金额;
将B的新余额写回;
COMMIT;
END IF;
END;
9、实际编写和调试存储过程或触发器.
答案:
10、实现索引的方式? 索引的原理? 索引的代价? 索引的类型?
答案: 实现索引的方式有两种:针对一张表的某些字段创建具体的索引,如对oracle: create index 索引名称 on 表名(字段名);在创建表时为字段建立主键约束或者唯一约束,系统将自动为其建立索引。
索引的原理:根据建立索引的字段建立索引表,存放字段值以及对应记录的物理地址,从而在搜索的时候根据字段值搜索索引表的到物理地址直接访问记录。
引入索引虽然提高了查询速度,但本身占用一定的系统存储容量和系统处理时间,需要根据实际情况进行具体的分析.
索引的类型有:B树索引,位图索引,函数索引等。
11、view 的概念 ? 何时应用?
答案: view 是对表级数据的多角度的透视,适用于对查询安全性、灵活性有一定要求的环境
12、sql语句例外处理?举例说明?
答案: 当sql 语句在执行过程中出现意外时,如查询时,未查询到结果;更改时无记录等情况的应采取的措施.
以oracle为例:测试其对exception的理解.如
select 字段 into 变量 from table ;
若查询出多条记录,应增加exception 例外处理.
Oracle处理异常有三种:
1.预定义的例外处理,EXCEPTION WHEN exception_name THEN
2.EXCEPTION_INIT产生例外
首先要declare 声明一个例外名;然后将例外名和错误代码绑定pragma exception_init(错误名,错误代码);最后在EXCEPTION 处when 错误名then
3.用户自定义例外,不用EXCEPTION,当判断条件成熟时用raise_application_error(-20000~~~-20999,提示信息)。
13、判断下列论述是否正确。 (1) 一个事务中的某条SQL命令提交时,其它SQL命令可以不提交。 (2) 在一个关系表中,主键可唯一标识一行记录。 (3) 一个关系表中的外键必定是另一表中的主键。 (4) 回滚可以在事务失败时,回到操作事务前的数据状态。
答案: (1)错误 (2)正确 (3)正确 (4)正确
14、以下哪些手段可保证数据库中数据的完整性和一致性: (1)自定义数据类型 (2)触发器 (3)主键和外键 (4)事务
答案: (1)(2)(3)(4) (为什么有1)
15、使用存储过程访问数据库比直接用SQL语句访问有哪些优点?
答案:存储过程是预编译过的,执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句,便于维护数据的完整性与一致性;可以实现代码的复用。
1.高级
16、对于精通的数据库系统描述其体系结构,主要包括存储机制、回滚机制、运行机制等.
答案:对oracle 系统而言,描述sga的结构; 后台pmon,ckpt、lgwr,smon等进程的功能;表空间的分配策略; 回滚段的结构
oracle的sga(系统全局区)包括的主要区有:数据库缓存区,重做日志缓存区,共享池(数据字典缓存和库缓存),大池等。数据库缓存区用来存放最近使用过的数据块主要和后台进程中的数据库写进程(DBWR)以及数据文件易做图;重做日志缓存区用于存放操作数据库数据所产生的重做日志信息,与之合作的有重做日志写进程(LGWR)和重做日志文件;共享池主要缓存SQL/PLSQL,资源锁,控制信息等,其中的库缓存主要缓存被解析执行过的SQL/PLSQL库缓存可分为共享SQL和私有SQL两个区,共享SQL用于存放SQL语句的语法分析结果和执行