1. 一个面试题 oracle:学生表s(sno、sname),课程表c(cno、cname,cteacher)选课表sc(sno、cno、score)
--1
select * from s where s.sno not in(select sno from c,sc where c.cno=sc.cno and c.cteacher='张三')
--2
select (select sname from s where s.sno=main.sno),avg(sc.score)
from s main,sc
where main.sno=sc.sno
and main.sno in(select sno from s s1,sc sc1 where s1.sno=sc1.sno and sc1.score<60 group by s1.sno having count(sno)>=2)
2. 有谁知道新蛋科技软件测试面试题啊
1、 存储过程在软件开发中有什么样的优势和劣势,有什么样的缺点。
答:存储过程的优点:
(1) 允许模块化程序设计,以后可以重复调用;可以由专人来完成,并可独立于程序源代码而单独修改。这样一个项目在需求分析、界面设计以及数据库设计完了以后,就可以开始写存储过程了,同一时间数据访问层也可以开始写了。没有必要等详细设计说明完成了在编码的时候才开始写SQL语句。
(2) 执行更快
存储过程都是预编译命令,执行起来比SQL语句更快。
(3) 减少网络流量
(4) 可作为安全机制,能够屏蔽数据库,用户并不知道数据库的真实结构。
存储过程的缺点
最大的缺点就是更换数据库的时候,比如SQL_Server数据库换成Oracle数据库时SQL_Server数据库的存储过程在Oracle当中完全不能用,只能重新用Oracle的命令来写存储过程。
2、 如果你的项目在开发时使用了存储过程,在改换数据库时,会发生什么样的问题,如何解决?
答:更换数据库的时候,比如SQL_Server数据库换成Oracle数据库时SQL_Server数据库的存储过程在Oracle当中完全不能用,只能重新用Oracle的命令来写存储过程。
对于这个问题,解决的办法是:采用统一的数据库建模工具,比如( ),所有的数据库设计全部在这个统一个数据库建模工具里进行,存储过程也可以在这里完成。最后在根据需要转设成具体的某一种数据库,如果需要SQL_Server就转变成SQL_Server数据库,如果需要Oracle就转变成Oracle数据库。
3、 在存储过程中如果前面的语句发生错误,后面的语句会不会执行,为什么。
4、 在存储过程中,怎样进行异常处理?
5、 存储过程的输出参数有几种形式,分别介绍一下, 返回值的类型有没有什么限制?
答:在SQL_Server中有四种形式:
(1)、以OUTPUT参数形式返回数据,返回值的类型限制为:整形值、字符值也可以是游标变量,这种形式,可以一次返回多个值。
(2)、以Return的形式返回值,返回值的类型限制为:整形值, 以表明过程的执行状态。
(3)、返回SELECT语句的结果集。
(4)、可以返回能从存储过程外引用的全局游标。
在Oracle中有三种形式:
(1)、以OUT参数形式返回数据,返回值的类型限制为:不可以是大数据类型如:LOB、CLOB、BFILE等。
(2)、以IN OUT形式返回数据,返回值的类型限制为:也不可以是大数据类型。
(3)、返回SELECT语句的结果集。
在Oracle中存储过程没有Return的返回值,只有方法Function才有返回值
6、 如果两个不同的存储过程在一个方中被同是调用,当其中任一个发生异常时,要求同时回滚两个存储过程的操作,怎么样处理?
答:可以创建另个一个存储过程,在这个存储中,创建一个自组事务,在这个自组事务中分别去调用那两个存储过程。语法如下:
create procere CallTwoProc
as
begin transaction
execute 第一个存储过程
execute 第二个存储过程
commit transaction
go
7、 请谈一谈视图的优点(创建视图的必要性)。基于视图的增删改会带来什么样的问题,如何解决样的的问题?
答:视图的优点:
(1)、可以筛选表中的行。
(2)、可以将多个物理数据表抽象为一个逻辑表,有利于跨库操作。
(3)、防止未经许可的用户访问敏感数据。
(4)、降低数据库的复杂程度。
(5)、视图是一种抽象表,它不占用存储空间。
基于视图的增删改会带来两个的问题:
(1)、INSERT、UPDATE和DELETE语句都必须要满足视图的条件,即视图要能看得到的才能INSERT、UPDATE和DELETE。通过视图的删除数据,要慎用,如果视图看不到的,无法删除。
解决办法:给视图加上with check option约束之后,基于视图的更改,凡是不符合视图约束(where……)的修改、插入、删除时会报错,用以限制对视图的修改。
(2)、当一个视图是基于多个基表建立的,在视图上修改数据时,只能INSERT或UPDATE基于一个基表的字段的值,无法同时修改两个或以上的基表的字段。DELETE不能运行,因为DELETE语句仅在视图的FROM子句中只包含一个表时才可以引用更新视图。
解决办法:建立INSTEAD OF触发器,把对视图的INSERT、UPDATE、DELETE操作转换为分别对几个基表的INSERT、UPDATE、DELETE操作,分作几步进行。这样对视图的INSERT、UPDATE、DELETE操作就有效了。
8、 索引有什么样的优点,也有什么样的缺点,我们在运用索引的时候,是显示运用的吗,那是怎么样应用的呢,请举例说明。
答:索引的优点:可以加快我们的查询速度。
索引的缺点:
(1)、当我们INSERT、UPDATE、DELETE时 ,数据库系统总是要去 更新每一个索引,因此而浪费很多时间。所以在基于事务的系统中,应尽量少建立索引。
(2)、带索引的给在数据库中会占据更多的存储空间。
索引并不显示使用,而是在执行SQL语句时,当中含有WHERE、ORDER BY、GROUP BY、HAVING等了句时,即凡是有对数据进行搜索和排序的语句,查询优化器组件会找出查询效率最高的办法,而查询优化器就会选择最优的索引进行工作。
9、 如果一个表其中有三个字段很常用,它们是A,B,C三个字段 ,其中B字段更常用,那么这时我们应该怎么样创建索引。
答:创建一个组合索引,其中包括A、B、C三个字段 ,但一定要把B字段放在最前面。
因为B字段最常用,它的唯一性应该是最高的。
10、如果一个表有10万条记录,其中有10个它段非常常用,我们应该怎么样他建索引。
答:创建一个组合索引,其中只包括非常常用的10个字段 ,排列的顺序一定是按唯一性的高低进行排列,唯一性最高的字段放在最前面,唯一性最低的放在最后面。
11.触发器会产生递归调用吗,请举例说明,像这种情况,我们应该怎么样避免呢?
答:触发器会产生递归调用。有两种情况
第一种:直接递归 即触发器被激发并执行一个操作,而该操作又使同一个触发器被激发。
第二种:间接递归 即触发器被激发并执行一个操作,而该操作又使另一个触发器被激发。第二个触发器又使得第一个触发器的原始表得到更新,从而再一次引发第一个触发器。
避免的办法有:
(1)、在编写触发器里,人为的注意到这一点。
(2)、防止直接递归:alter database pubs set RECURSIVE_TRIGGERS OFF
防止间接递归:请将 nested triggers 服务器选项设置为 0。
12、如果基于一个基表创建了很多个同种类型的触发器,比如UPDATA触发器,我们跟据什么来确定他们所执行的顺序?
13、(1)在数据查询中,我们需要把两个或者多个表作横方向联接,用什么命令?
答:用联接来解决这个问题join…..on
(2)请问联接有多少种类,分别是哪几种?
答:有三种,他们是左联接 left join ….on,右联接 right join…..on, 内联接inner join……on或者join……on。
(3)在联接中,用什么来指定联接的条件?
答:用on
(4)在联接查询查询中,有没有规定在所查询的两个表的字段中一定要有主键字段?
答:没有这种说法,不一定必须查询主键,正确的说法是:典型的联接是指定一个表的外键以及在另一个表上的关联键。
14(1)在数据查询中,我们需要把两个或者多个表作纵方向联接,用什么命令?
答:使用Union联合命令。
(2)在使用Union联合命令时,我们应注意些什么?
答:所联合的几个查询,字段名可以不相同,但是字段类型、字段数都必须要相同。
(3)请说一说Union和Union All这两个命令的区别?
答:Union命令得到的结果会去掉重复项,作了一个distinct操作。
Union All命令不会去掉重复项。
15、数据库的安全和管理方面的间题没有问。
依往年来说,第一到第七题常问,你看看吧
3. 关于oracle数据库的一道面试题,使用wm_concat()主函数完成
||WITH div_pm_ci AS(
select ci_id, substr( stu_ids, instr(','||容 stu_ids, ',', 1, rn),
instr( stu_ids||',', ',', 1, rn) - instr(','|| stu_ids, ',', 1, rn) ) stu_id
from pm_ci,(select rownum rn from al connect by rownum < 10)
where instr(','|| stu_ids, ',', 1, rn) > 0)
SELECT a.ci_id,wm_concat(b.stu_name) stu_name
FROM div_pm_ci a,pm_stu b
WHERE a.stu_id=b.stu_id
GROUP BY a.ci_id
4. Oracle DBA面试题
列举几个比较容易被问到的问题。(来自cuug)
1. 解释冷备份和热备份的不同点以及各自的优点
解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
3. 如何转换init.ora到spfile?
解答:使用create spfile from pfile 命令
.
4. 解释data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
5. 给出两个检查表结构的方法
解答:1、DESCRIBE命令
2、DBMS_METADATA.GET_DDL 包
6. 怎样查看数据库引擎的报错
解答:alert log.
7. 比较truncate和delete 命令
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.
8. 使用索引的理由
解答:快速访问表中的data block
9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据
解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放对fact table 某些属性描述的
信息
10. FACT Table上需要建立何种索引?
解答:位图索引(bitmap index)
11. 给出两种相关约束?
解答:主键和外键
12. 如何在不影响子表的前提下,重建一个母表
解答:子表的外键强制失效,重建母表,激活外键
13. 解释归档和非归档模式之间的不同和它们各自的优缺点
解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。
但是非归档模式可以带来数据库性能上的少许提高
14. 如何建立一个备份控制文件?
解答:Alter database backup control file to trace.
15. 给出数据库正常启动所经历的几种状态 ?
解答:
STARTUP NOMOUNT – 数据库实例启动
STARTUP MOUNT - 数据库装载
STARTUP OPEN – 数据库打开
16. 哪个column可以用来区别V$视图和GV$视图?
解答: INST_ID 指明集群环境中具体的某个instance 。
17. 如何生成explain plan?
解答:
运行utlxplan.sql. 建立plan 表针对特定SQL语句,使用 explain plan set statement_id = 'tst1' into plan_table 运行
utlxplp.sql 或 utlxpls.sql察看explain plan
18. 如何增加buffer cache的命中率?
解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set
db_cache_size 命令
19. ORA-01555的应对方法?
解答:具体的出错信息是snapshot too old within rollback seg , 通常可以通过增大rollback seg来解决问题。当然也需要察看一下具
体造成错误的SQL文本
20. 解释$ORACLE_HOME和$ORACLE_BASE的区别?
解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录
5. Oracle数据库面试题 用户的权限都有哪些
系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等(对用户而言)
对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等(是针对表或视图而言的)
1.系统权限
超过一百多种有效的权限(SELECT * FROM SYSTEM_PRIVILEGE_MAP查)
数据库管理员具有高级权限以完成管理任务,例如:
–创建新用户
–删除用户
–删除表
–备份表
系统权限分类:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
a.常用的系统权限:
CREATE SESSION 创建会话
CREATE SEQUENCE 创建序列
CREATE SYNONYM 创建同名对象
CREATE TABLE 在用户模式中创建表
CREATE ANY TABLE 在任何模式中创建表
DROP TABLE 在用户模式中删除表
DROP ANY TABLE 在任何模式中删除表
CREATE PROCEDURE 创建存储过程
EXECUTE ANY PROCEDURE 执行任何模式的存储过程
CREATE USER 创建用户
DROP USER 删除用户
CREATE VIEW 创建视图
2.对象权限
不同的对象具有不同的对象权限
对象的拥有者拥有所有权限
对象的拥有者可以向外分配权限
ORACLE一共有种对象权限
对象权限 表 视图 序列 过程
修改(alter) √ √
删除(delete) √ √
执行(execute) √
索引(index) √
插入(insert) √ √
关联(references) √ √
选择(select) √ √ √
更新(update) √ √
6. Oracle数据库的数据提取(一道面试题)
--建立临时视图1,检索每个部门第一名分数
create or replace view temp_v1 as
select 部门号,max(成绩) as 成绩 from Employee group by 部门号;
--在临时视图1的基础上建立临时视图2,检索第二名分数
create or replace view temp_v2 as
select 部门号,max(成绩) as 成绩 from Employee
where (部门号,成绩) not in (select * from temp_v1)
group by 部门号;
--联合两个临时视图的查询结果,建立临时视图3
create or replace view temp_v3 as
select * from
(select * from temp_v1 union select * from temp_v2)
order by 部门号,成绩;
--建立目标视图
create or replace view VdepEm2 as
select 部门号,员工号,成绩 from Employee
where(部门号,成绩) in (select * from temp_v3);
*******************
昨天有点事情耽搁了,这个应该可以实现你的要求。如果不允许建立临时视图的话,你把这几个临时视图糅进去就可以了。
7. 面试题:oracle数据库优化
oracle数据库优化的话主要有以下几个方面(我接触过的,可能不全面):回
1 查询语句的答优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2 数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3 数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4 存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
8. oracle几道简单面试题,请大侠帮忙
1,数据库迁移需要复考虑制的问题很多,这个一句两句也说不完;
2,首先考虑的就是数据量,如果是小表,没有索引反而访问还要快一些。
3,权衡全表还是走索引,看SQL的执行计划就可以了;
4,这个数据库对象是用在两个数据库之间联接,交换,查询数据用的。
5,去数据库里查锁住的进程,杀了就可以了。之后再分析原因。
6,分区表是数据量大于1.5gb以上才用的吧。
7,临时表空间当然会满,查视图也是一样的。
8,开了归档就相当于win系统的设置里开了系统还原一样。
9,redo这个设置要看实际情况,根据主机CUP处理能力,数据库优化参数等因素决定的。
9. 软件测试工程师 面试oracle数据库什么题目
ORACLE数据库工程师,日常维护,如:备份,管理
在数据库中进行开发,不知道楼主要开发什么,有几个优秀的第三方工具,toad,plsql可用于各种数据库开发
10. oracle数据库面试题,如下,求解!
1
proct主键id
顾客表主键acid
商品交易表为联合主键(acid+id),同时acid和id分别是顾客表和商品表的外键
2
selectb.acname,b.acadress
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='李子'
3
selectt1.acname
from
(selectb.acname
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='李子')t1,
(selectb.acname
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='苹果')t2
wheret1.acname=t2.acname4
selectb.acname,
sum(casewhentype='家电'thena.price*c.amountelse0end)as家电价格,
sum(casewhentype='水果'thena.price*c.amountelse0end)as水果价格
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
groupbyb.acname