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个小数截取value
round(value,precision)保留precision个小数对value进行四舍五入
sign()根据值为正负零返回1,-1,0 mod()取模操作
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语句的语法分析结果和执行计划,私有SQL则用来存放与具体SQL语句执行有关的绑定变量,会话参数等。
ORACLE实例的另外一个重要部分就是其后台进程,主要的后台进程有:数据库写进程(DBWR),重做日志写进程(LGWR),系统监视器(SMON),进程监视器(PMON),检查点进程(CKPT)。DBWR主要是对数据库缓存区中的脏冷数据进行写入数据文件操作;LGWR主要是将对数据库数据操作所产生的重做日志信息写入到重做日志文件中;SMON完成由于非正常关闭数据库的情况下重起数据库时对数据库的恢复;PMON用来恢复失败的用户进程和服务进程,并释放其所占的系统资源;CKPT可以表示数据库在此出处于完整状态。
逻辑存储结构:数据块BLOCK,区EXTENT,段SEGMENT,表空间TABLESPACE
物理存储空间:表空间,数据文件,控制文件,日志文件,数据字典
软件体系结构就是上边对SGA和后台进程的描述。
17 、对于精通的数据库系统描述其数据一致性的保证机制,包括lock,事务一致性等.
答案: 在并发环境下,采用多种机制保持其数据的一致性,如oracle系统提供的事务级的一致性、行级锁、表级锁等等.
18、对精通的数据库系统描述其联机备份机制、恢复机制,考核其对日志的理解.
答案: 描述相关数据库的实时联机备份策略,如数据库系统在运行中通过何种方式保证其数据的实时备份,
出现问题时,应采取何种办法从联机备份进行恢复.
对对oracle而言,其archive online 备份方式应如何设置、修改什么参数、如何安排备份空间等等.
19、 精通的数据库系统描述性能优化方法,包括优化的策略、参数、验证方法等.
答案:
20、Truncate; 与
delete;的区别?(这道题可以衍生出很多的问题比如:想快速的清除一个很大的表中的数据应该用设么操作?答案是:应该用truncate。还有,在对两个相同纪录数的分别表使用了truncate,和delete
commit;后对这两个表进行count(*)统计记录数操作,那个表速度会快些?答案是:使用了truncate的会快些。)
21、写一个‘游标’并使用它。(这道题应该注意的是:在使用游标后一定要记得关闭游标)。
Declare
Cursor cursor_name is
Select * from tablename;
Begin
Open cursor_name;
Loop
Fetch cursor_name into bianliang;
Exit when cursor_name%notfound;
Sql……..
End loop;
Close cursor_name;
End;
22、在创建表的时候会设置
pctfree 10
pctused 40
而创建表的索引的时候却没有
pctused 40
这是为什么?
(这道题的主要思想是索引不能在pctused 40上得到什么好处)
23、使用过的最大的表有多少行纪录?(这道题不是看应试者的技术过不过关,而是考察应试者是否有大型数据库的管理操作经验)
不要对表的索引列进行函数操作,因为这样系统就不能使用索引,使查询变得很慢,但是在ora8i以后就已经开始支持函数的索引,弥补了这个不足。
24、ORACLE数据库启动与关闭的步骤
启动:启动实例—-加载数据库数据—–打开数据库
关闭:关闭数据库—-卸载数据库数据—-关闭实例
25、Delete与truncate的区别
delete一般用于删除少量记录的操作,而且它是要使用回滚段并且要进行显示的提交事务。而truncate则使用于大量删除数据,而且隐式提交事务,其速度要比使用delete快的多。
26、DDL和DML分别代表什么??
DDL表示数据定义语言,在ORACLE中主要包括CREATE,ALTER,DROP
DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE
28、Javascript中动态效果时调用的函数。
29、数据库中有若干条相同的记录,删除到只剩下一条记录。如何做,请用SQL语句通过ROW_ID来写出执行过程。
Delete table_name where ziduan=’’ and rowed<(select max(rowed)
from table_name where ziduan=’’);
30、oracle数据库表存放到磁盘什么地方(什么物理空间上——大概意思)?
Oracle数据库表存放在数据文件上。
31、Oracle使用什么语句给用户分配权限?
GRANT TO 语句
32、你在项目现场,用户要求你向正在运行的表中添加一个字段,你该怎么做?
第一种方法:关闭数据库,然后使用受限模式打开,由sys/sysdba来进行
第二种方法:不关闭数据库,将数据库置于静默状态在SYS/SYSDBA模式下用ALTER SYSTEM QUISCE
RESTRICTED,这种状态下只有SYS/SYSDBA才可以对数据库进行操作,修改完毕之后再退出静默状态ALTER SYSTEM
UNQUISCE
在这里复习到了数据库的两种特殊状态:静默状态(QUISCE)和挂起状态
静默状态就是只有特殊权限的SYS/SYSDBA才可以对数据库进行操作,使用ALTER SYSTEM QUISCE
RESTRICTED以后系统将等候活动着的会话主动结束,同时阻止建立新的会话,系统挂起所有的SQL语句,等恢复以后再重新激活会话执行挂起的SQL。
挂起状态就是系统将数据库所有对物理文件(数据文件,控制文件,日志文件)的I/O操作都暂停,但是并不禁止非DBA用户对数据库进行操作。这种状态主要用于进行数据库备份。
33、Oracle中回滚的概念?回滚段有什么作用。
回滚就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。
回滚段就是为回滚提供依据,记录的是事务操作数据库之前的数据或者对应于以前操作的操作,这个内容要根据以前的操作而定。比如说以前事务操作如果是UPDATE那么回滚段则存储UPDATE以前的数据,如果事务是DELETE操作那么存储的则是与之相对应的INSERT操作语句,相反如果事务操作是INSERT那么记录相应的则是DELETE操作了。
34、Oracle的8I和9I有什么区别
35、一张表有10万条记录,如何删除其中的任意20条记录?请用SQL语句进行操作
36、客户端如何访问服务器端的oracle?如果客户端无法访问服务器端的oralce,可能会是什么原因?
客户端通过网络或者进程方式以合法的用户身份来取得和服务器端ORACLE的连接。如果客户端无法访问服务器端ORACLE可能出现的原因是:用户无权访问;服务器端数据库并没有打开(启动数据库的第三步没有完成);如果服务器是在共享模式下的则有可能没有对应于该客户所使用的通信协议的调度进程Dnnn。
37、 oracle中执行语句错误时去哪里查找错误信息?
Select * from USER_ERRORS
38、 select语句需要提交吗?insert和update语句呢?
39、 在执行insert语句并提交后,这些提交的数据存储到什么地方??
被存储到数据文件中
40、 oracle中有哪些类型的文件?
数据文件,控制文件,日志文件和数据字典
41、 介绍一下oracle的体系结构?
逻辑体系结构:块,区,段,表空间
物理体系结构:表空间,三大文件
软件体系结构:SGA,后台进程
42、 谈谈对oracle的row_ id是否理解?请简述?
ORACLE的row_id是一个伪列,其个是为18个字节可将这18个字节用6363来划分,分别表示段编号,数据文件编号,数据块编号和记录编号。
Row_id表示的是一个记录的物理存储地址。
43、 oracle中如何删除用户?
Oracle中使用DROP USER来删除用户,如果使用DROP USER
CASCADE那么用户的对象也同时被删除掉。为了达到删除用户的效果而又不影响对用户下的对象的使用可以使用alter user
username account lock将用户锁定。
44、 客户端对服务器端的oralce操作的流程是什么?
专用模式下:用户通过应用程序进程试图去得到一个与ORACLE数据库服务器的连接客户端通过网络传递连接请求,ORACLE服务器则使用监听进程监听用户请求,并且来验证用户身份,通过验证则为用户分配一专用服务进程用户提交SQL语句专用服务进程则首先在SGA区的共享池中检查是否有与该SQL语句相似的已经被解析执行并且缓存的SQL语句,如果有则采用它的解析结果和执行计划执行SQL语句,如果没有则对SQL语句进行语法解析生成执行计划通过解析则执行操作获取数据将执行结果返回给客户。
共享模式下:与专用模式不同在于当监听程序验证用户的合法性以后并不为它分配一个专用的服务进程,而是将该请求与响应的调度进程相联系起来,并将起放入到一个请求队列中,最终由响应的Dnnn来从调度队列中获取一个请求并为之分配一个空闲的服务进程,接下来有服务进程对该请求进行服务操作和专用方式下相同,处理完成之后由服务进程先将结果放入一个返回队列最后再由调度进程(Dnnn)将返回队列中的结果返回给对应的用户。
45、 exits和in在ORALCE数据库中那个执行效率更高?
Exits执行效率比in高。因为:
46、 如何判断游标已经到最后一行?
Cursor_name%notfound
47、 聚簇索引和普通索引在不同的SQL语句中哪个效率更高??(笔试题,原题回忆不起来,主题就是聚簇索引和普通索引的区别)
概念类:
聚合函数? Session的定义和用法? Oracle的存储过程 ? 什么是构造函数?
48、简述ORACLE中SGA的组成部分。
答:系统全局区包括:共享池、重做日志缓存区、数据高速缓存区,大池,JAVA池。
49、简述ORACLE的启动和关闭各有多少步骤?
启动:启动实例、装载数据库数据、打开数据库。
关闭:关闭数据库、卸载数据库数据、关闭实例。
50、在Oracle表空间的分类和作用,如排序时数据将放在什么表空间?
作用是为了突破存储容量的限制,是一个逻辑概念。排序数据放在临时表空间。
51、执行COMMIT命令时,数据库将会发生什么改变,ROLLBACK呢?
答:commit
提交时首先是与事务对应的重做日志信息将被写入到数据库物理文件中的重做日志文件中,至于是否会真正将事务操作的内容反映到数据文件还好看DBWR是否启动了。在完成数据库的插入,删除和修改操作时,只有当事务提交到数据库才算完成,有提交前只有操作数据库的本人才能看到,别人只有在最后提交完成才可以看到。
ROLLBACK回滚当前尚未提交的事务,使数据库恢复到事务操作前的状态。
52、用命令创建用户,并为用户授权。
Create user user_name
identified by password /
identified externally/
identified blobally as ‘CN=user’
default tablespace tablespace_name
temporary tablespace tablespace_name;
grant role/privilege to user_name;
53、
写一个存储过程,使employee(name,age,emp_no,salary)表中的salary值在0-1000之间的员工的工资上涨20%,(提示:要求用到游标)
Cteate or replace procedure emp_sal
V_name employee.name%type;
V_emp_no employee.emp_no%type;
V_salary employee.salary%type;
Cursor cursor_sal is
Select name,emp_no,salary from employee where salary between 0 and
1000;
Begin
Open cursor_sal;
Loop
Fetch cursor_sal into v_name,v_emp_no,v_salary;
Exit when cursor_sal%notfound;
Update employee set salary=salary*1.2 where name=v_name and
emp_no=v_emp_no;
End loop;
Close cursor_sal;
Commit;
End;
54、 ORACLE数据库都有哪些类型的文件?
数据文件,控制文件,日志文件,参数文件
55、 用命令创建表空间、用户,并为用户授权、收回权限。
Create tablespace tabllespacename
Datafile ‘f:\orcl\user001.dbf size 20m
Default storage(
Initial 512k
Next 512k
minextents 2
pctincrease 50%
maxExitnts 2048)
minimum extent 512k
logging
online
permanent
extent management dictionary;
回收权限: revoke privilege from user;
create tablespace tablespace_name
datafile ‘’
default storage(
initial xxxkb
next yykb
minextents 2
pctincrease nnnn
maxextents mmm)
logging
online
extent management dictionary/local[autoallocate/uniform size
xxxmb];
create user user_name
identified by passwore/
identified externally/
identified globally as ‘CN=user’
default tablespace tablespace_name
temporary tablespace tablespace_name
[account lock /unlock]
grant connect to user_name;
grant create table to suer_name;
grant update on table_name to user_name;
revoke create table from user_name;
revoke update on table_name from user_name;
56、 在Oracle中如何更改用户名?
57、如何在Oracle中查询某个用户下所有已建的表?
答:select * from cat;
57、 执行TRUNCATE命令后,存储空间是否还存在,是否可被其他的表占用?
执行TRUNCATE之后,为表分配的区空间将被回收HWM将回退,如果在使用TRUNCATE的时候没有指定REUSE
STORAGE那么执行操作后仅仅留下由MINEXTENTS所指定的区否则表的所有空间将被回收用于再分配。
59、何在Oracle中查看当前用户,通常有哪些方式?(提示:show user和select * from
user_users)show user;/select username from user_users;
60、 出在Oracle中,创建表空间的语法结构,以及所含参数说明。
Create tablespace tablespacename
Datafile ‘’
Logging/nologging
Default storage(initial kb
Next kb
Minextents x
Maxextents y
Pctincrease z
)
online/not online
extent management dictionary/local[autoallocate/uniform size
kb];
61、 如何判断游标是否到了末尾?(提示:用%notfound)
cursor_name%notfound
62、 在Oracle中,如何查看当前用户下的所有表空间?
Select tablespace_name from user_tablespaces;
63、 在Oracle中,你所创建的表空间信息放在哪里?
存放在数据字典中,数据字典内容对应于系统表空间SYSTEM表空间。
64、 ORACLE中的控制文件什么时候读取?
ORACLE服务器启动时,先启动实例然后再读取数据库的各个文件当然也包括控制文件。也就是说在数据库服务器启动的第二步时读取。
65、 Oracle的表格信息存储在哪个地方?
SYSTEM表空间的数据字典文件中。
66、如何根据字典创建一个表空间,并说明参数?
66、 ORACLE中当一个用户正在操作一个执行过程,管理员此时取消了他的权限,会发生什么事情?
68、谈谈你对角色的理解,常用的角色有哪些?
角色就是一组权限的数据库实体,它不属于任何模式或用户但是可以被授予任何用户。常用的角色有CONNECT,DBA,RESOURCE,SELECT_CATALOG_ROLE(查询所有表视图权),DELETE_CATALOG_ROLE(删除权限)等。
角色的创建和授权:和创建用户为用户授权差不多。Create role role_name identified …
grant 权限to role_name。
69、简述Oracle的归档与不归档工作模式,分别说明。
Oracle归档模式是指在创建数据库时指定了ARCHIVELOG参数,这种模式下,当重做日志文件写满的时候会将该重做日志文件的内容保存到指定的位置(由初始化文件中的参数ARCHIVE_LOG_DEST_n来决定)。并不是数据库在归档模式下工作的时候就可以自动完成归档操作,在归档模式下可以有两种归档方式:自动归档(在初始化文件中的参数ARCHIVE_LOG_START被设置为TRUE)和手动归档。如果归档模式下没有启动自动归档的话,而且又没有实行手动归档那么当LGWR进程将重做日志信息写入已经写满的重做日志文件时数据库将会被挂起直到进行了归档。可见归档是对重做日志文件信息的一种保护措施。
Oracle非归档模式下当重做日志文件写满以后若是有LGWR进行重做日志信息的写入操作时,以前保存在重做日志文件中的重做日志信息就会被覆盖掉。
70、Oracle索引分为哪几类,说出唯一索引和位图索引的概念。
Oracle索引有B树索引,位图索引,函数索引,簇索引等。
唯一索引也是B树索引的一种,它要求被索引的字段值不可以重复。在创建的时候使用B树算法创建。
位图索引并不是采用象唯一索引那样存储(索引字段值,记录ROWID)来创建索引段的,而是为每一个唯一的字段值创建一个位图,位图中使用位元来对应一个记录的ROWID。位元到ROWID是通过映射的到的。
71、ORACLE的基本数据类型有哪些?
Char()存储定长字符,定义的时候可以不为他指定长度但是如若往里插入值则会出错;varchar2()存储变长字符定义的时候必须指定长度,date存储时间日期;Number()数字类型,包括整型,浮点型等;clob()大容量字符串;blob()大二进制对象
72、SQL中,执行四舍五入的是哪个函数?
Round(value,保留的小数位数)与只对应的还有一个特别相似的函数trunc(value,保留的小数位数)它的作用是根据要保留的小数位数来截取原数。
73、oracle数据库表存放到磁盘什么地方?数据文件
ORACLE数据库的表存放在物理文件中的数据文件中。
74、当执行insert语句并提交后,这些提交的数据存储到什么地方??
存储到了数据库的数据文件中。
75、Exits和in在ORALCE数据库中那个执行效率更高?
EXITS执行效率要比使用IN要快。
76、ORACLE自己提供的函数,想知道具体位置,如何操作?
77、数据库的几种物理文件?
1) 数据文件 2)控制文件 3)日志文件
78、 控制文件都含有哪些信息?
控制文件存放有实例信息(实例名称创建时间等),数据文件和日志文件信息,还有系统运行时记录的系统变更码(SCN),检查点信息和归档的当前状态信息等。数据库在加载数据库的时候首先要读取控制文件获得和数据库有关的物理结构信息之后才能够正确加载数据文件和日志文件并打开数据库。
79、 Decode函数的用法?
DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。初看一下,DECODE
只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使DECODE函数具备大于、小于或等于功能。
2. 如何用decode进行大于小于的比较?
利用sign()函数和DECODE和在一起用
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;
decode(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
……
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
• 使用方法:
1、比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; –取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
2、表、视图结构转化
现有一个商品销售表sale,表结构为:
month char(6) –月份
sell number(10,2) –月销售金额
现有数据为:
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
想要转化为以下结构的数据:
year char(4) –年份
month1 number(10,2) –1月销售金额
month2 number(10,2) –2月销售金额
month3 number(10,2) –3月销售金额
month4 number(10,2) –4月销售金额
month5 number(10,2) –5月销售金额
month6 number(10,2) –6月销售金额
month7 number(10,2) –7月销售金额
month8 number(10,2) –8月销售金额
month9 number(10,2) –9月销售金额
month10 number(10,2) –10月销售金额
month11 number(10,2) –11月销售金额
month12 number(10,2) –12月销售金额
结构转化的SQL语句为:
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),’01′,sell,0)),
sum(decode(substrb(month,5,2),’02′,sell,0)),
sum(decode(substrb(month,5,2),’03′,sell,0)),
sum(decode(substrb(month,5,2),’04′,sell,0)),
sum(decode(substrb(month,5,2),’05′,sell,0)),
sum(decode(substrb(month,5,2),’06′,sell,0)),
sum(decode(substrb(month,5,2),’07′,sell,0)),
sum(decode(substrb(month,5,2),’08′,sell,0)),
sum(decode(substrb(month,5,2),’09′,sell,0)),
sum(decode(substrb(month,5,2),’10′,sell,0)),
sum(decode(substrb(month,5,2),’11′,sell,0)),
sum(decode(substrb(month,5,2),’12′,sell,0))
from sale
group by substrb(month,1,4);
79、CASE语句的用法?
Oracle用法很简单:
SELECT last_name, job_id, salary
CASE job_id
WHEN ‘IT_PROG’ THEN 1.10*salary
WHEN ‘ST_CLERK’ THEN 1.15*salary
WHEN ‘SA_REP’ THEN 1.20*salary
ELSE salary END “REVISED_SALARY”
FROM employees
80、 truncate和delete的区别?
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言而DELETE是DML语句,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能触发触发器,DELETE会触发触发器。
5、不能授予任何人清空他人的表的权限。
6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
7、不能清空父表。
81、 表空间如何扩展?并用语句写出?
两种扩展方式:
a) 增加数据文件
alter tablespace tablespace_name add datafile ‘’ xxMB
b) 扩展数据文件大小
alter database datafile ‘’ resize newMB
82、 表空间区管理方式?哪种方式现在是推荐使用的?
a) 字典管理方式
extent management dictionary;默认方式
b) 本地管理方式
extent management local[autoallocate/uniform xxmb];
83、 用什么函数获得日期?和日期中的月,日,年
to_char(sysdate,’year’):tow thsound six to_char(sysdate,’yyyy’)
:2006
to_char(sysdate,’month’):8月 to_char(sysdate,’mm’):08
to_char(sysdate,’day’):星期4 to_char(sysdate,’dd’):22
84、 分区表的应用?
a) 一个分区表有一个或多个分区,每个分区通过使用范围分区、散列分区、或组合分区分区的行
b) 分区表中的每一个分区为一个段,可各自位于不同的表空间中
c) 对于同时能够使用几个进程进行查询或操作的大型表分区非常有用
85、 谈谈索引的用法及原理?
索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据块的I/O次数,因此可以显著提高性能。
86、 存储过程的应用,如何既有输入又有输出?
Create procedure pro_name
(xxxx in/out type;
yyyy in/out/inout type;
) is/as
zzzz type;
begin
sqlpro;
exception
exceptionxxxxx;
commit;
end;
87、 常发生的异常有哪些?
常用预定义例外
CURSOR_ALREADY_OPEN — ORA-06511 SQLCODE = -6511 游标已经打开
DUP_VAL_ON_INDEX — ORA-00001 SQLCODE = -1 违反唯一性约束
INVALID_CURSOR — ORA-01001 SQLCODE = -1001 非法游标操作
INVALID_NUMBER — ORA-01722 SQLCODE = -1722 字符向数字转换失败
LOGIN_DENIED — ORA-01017 SQLCODE = -1017
NO_DATA_FOUND — ORA-01403 SQLCODE = +100 没有找到数据
NOT_LOGGED_ON — ORA-01012 SQLCODE = -1012 没有连接到数据库
PROGRAM_ERROR — ORA-06501 SQLCODE = -6501 内部错误
STORAGE_ERROR — ORA-06500 SQLCODE = -6500
TIMEOUT_ON_RESOURCE — ORA-00051 SQLCODE = -51
TOO_MANY_ROWS — ORA-01422 SQLCODE = -1422 返回多行
TRANSACTION_BACKED_OUT — ORA-00061 SQLCODE = -61
VALUE_ERROR — ORA-06502 SQLCODE = -6502 数值转换错误
ACCESS_INTO_NULL试图为NULL对象的属性赋值
ZERO_DIVIDE — ORA-01476 SQLCODE = -1476 被零除
OTHERS — 其它任何错误的处理
88、 如何使用异常?
在oracle中有三种类型的异常。预定义的异常 非预定义的异常 用户定义的异常
第二种非预定义的异常是与特定的oracle错误关联。并且用PRAGM
EXCEPTION_INIT(EXCEPTION_NAME,ERROR_NUMBER)关联一起的。但是到底有什么用啊?
例如:declare dup_primary_key exception; pragma
exception_init(dup_primary_key,-1); begin insert into itemfile
values(‘i201′,’washer’,'spares’,100,50,250,12,30); exception when
dup_primary_key then dbms_output.put_line(‘重复项编号-主键冲突’); end
第一种的使用方法:exception
when 异常名称 then
异常处理代码;
第三种的用法:if 条件 then
raise_application_error(-20000“““`-20999,提示信息);
end if;
89、优化的策略一般包括:
• 内存优化
• 操作系统优化
• 数据存储的优化
• 网络优化等方法
具体到不同的数据库涉及到要调整不同的数据库配置文件、不同的操作系统参数、网络参数等等, 不同的数据库不同.