Oracle经典练习题(很全面)讲解学习
O r a c l e经典练习题
(很全面)
Oracle 经典练习题
一.创建一个简单的PL/SQL程序块
1.编写一个程序块,从emp表中显示名为“SMITH”的雇员的薪水和职位。
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where ename='SMITH';
dbms_output.put_line('员工的工作是:'||v_emp.job||' ;他的薪水是:
'||v_emp.sal);
end;
2.编写一个程序块,接受用户输入一个部门号,从dept表中显示该部门的名称与所在位置。
方法一:(传统方法)
declare
pname dept.dname%type;
ploc dept.loc%type;
pdeptno dept.deptno%type;
begin
pdeptno:=&请输入部门编号;
select dname,loc into pname,ploc from dept where
deptno=pdeptno;
dbms_output.put_line('部门名称: '||pname||'所在位
置:'||ploc);
exception –异常处理
when no_data_found
then dbms_output.put_line('你输入的部门编号有误!!');
when others
then dbms_output.put_line('其他异常');
end;
方法二:(使用%rowtype)
declare
erow dept%rowtype;
begin
select * into erow from dept where deptno=&请输入部门编号;
dbms_output.put_line(erow.dname||'--'||erow.loc); exception
when no_data_found
then dbms_output.put_line('你输入的部门号有误!!!');
when others
then dbms_output.put_line('其他异常');
end;
3.编写一个程序块,利用%type属性,接受一个雇员号,从emp表中显示该雇
员的整体薪水(即,薪水加佣金)。
declare
pempno emp.empno%type;
totalSal emp.sal%type;
begin
pempno:=&请输入员工编号;
select sal+nvl(comm,0) into totalSal from emp where
empno=pempno;
dbms_output.put_line('该员工总共薪水'||totalSal);
exception
when no_data_found
then dbms_output.put_line('你输入的员工编号有误!!');
when others
then dbms_output.put_line('其他异常');
end;
4.编写一个程序块,利用%rowtype属性,接受一个雇员号,从emp表中显示
该雇员的整体薪水(即,薪水加佣金)。
declare
erow emp%rowtype;
begin
select * into erow from emp where empno=&请输入员工编号;
dbms_output.put_line(erow.sal+nvl(https://www.360docs.net/doc/3816302473.html,m,0)); exception
when no_data_found
then dbms_output.put_line('你输入的员工编号有误!!');
when others
then dbms_output.put_line('其他异常');
end;
5.某公司要根据雇员的职位来加薪,公司决定按下列加薪结构处理:
Designation Raise
-----------------------
Clerk 500
Salesman 1000
Analyst 1500
Otherwise 2000
编写一个程序块,接受一个雇员名,从emp表中实现上述加薪处理。
declare
erow emp%rowtype;
begin
select * into erow from emp where ename='&name';
if erow.job='Clerk'then
update emp set sal=sal+500where empno=erow.empno;
elsif erow.job='Salesman'then
update emp set sal=sal+1000where empno=erow.empno;
elsif erow.job='Analyst'then
update emp set sal=sal-1500where empno=erow.empno;
else
update emp set sal=sal+2000where empno=erow.empno;
end if;
commit;
exception
when no_data_found
then dbms_output.put_line('你输入的员工编号有误!!'); when others
then dbms_output.put_line('其他异常');
end;
6.编写一个程序块,将emp表中雇员名全部显示出来。
cursor cs is select ename from emp;
begin
for erow in cs loop
dbms_output.put_line(erow.ename);
end loop;
end;
7.编写一个程序块,将emp表中前5人的名字显示出来。
方式一:
declare
cursor cs is select t.* from (select e.ename,rownum rm from emp e)t where t.rm between1and6;
begin
for erow in cs loop
dbms_output.put_line(erow.ename);
end loop;
end;
方式二:
--方式二
declare
cursor cs is select ename from emp;
i number :=1;
begin
for erow in cs loop
dbms_output.put_line(erow.ename);
i:=i+1; --迭代
exit when i>5; --退出条件
end loop;
end;
8.编写一个程序块,接受一个雇员名,从emp表中显示该雇员的工作岗位与薪水,若输入的雇员名不存在,显示“该雇员不存在”信息。
declare
pjob emp.job%type;
totalsal emp.sal%type;
select job,sal into pjob,totalsal from emp where
ename='&请输入员工姓名';
dbms_output.put_line(pjob ||'----' ||totalsal);
exception
when no_data_found then
dbms_output.put_line('你输入的员工姓名有误!!');
end;
9.接受两个数相除并且显示结果,如果第二个数为0,则显示消息“除数不能为0”。
declare
num1 float;
num2 float;
res float;
my_exception Exception;
begin
num1:=&被除数;
num2:=&除数;
res:=num1/num2;
raise my_exception;
exception
when my_exception then
dbms_output.put_line(res);
when others then
dbms_output.put_line('除数不能为0');
end;
二.声明和使用游标
------ 游标:(集合) ,处理返回多行记录的问题
-- 声明游标
--语法: cursor 游标名 is DQL;
-- 遍历游标
/*
1.打开游标, open 游标名;
2.从游标中提取一行的记录:fetch 游标名 into 变量名,...;
3.使用循环, exit when 游标名%notfound;
4.关闭游标, close 游标名;
1.通过使用游标来显示dept表中的部门名称。
declare
cursor co is select dname from dept;
begin
for vname in co
loop
dbms_output.put_line(vname.dname);
end loop;
end;
2.使用For循环,接受一个部门号,从emp表中显示该部门的所有雇员的姓
名,工作和薪水。
declare
cursor c_emp is select * from emp where deptno=&请输入部门号;
begin
for erow in c_emp loop
dbms_output.put_line(erow.ename ||' ' ||erow.job ||' '
||erow.sal);
end loop;
exception
when no_data_found then
dbms_output.put_line('输入的部门编号有误');
end;
3.使用带参数的游标,实现第2题。
declare
cursor c_cs(c_deptno number) is select * from emp where
deptno=c_deptno;
v_deptno number;
begin
v_deptno:=&请输入部门编号;
for erow in c_cs(v_deptno) loop
dbms_output.put_line(erow.ename ||' ' ||erow.job ||' '
||erow.sal);
end loop;
exception
when no_data_found then
dbms_output.put_line('输入的部门编号有误');
end;
4.编写一个PL/SQL程序块,从emp表中对名字以“A”或“S”开始的所有雇员按他们基本薪水的10%给他们加薪。
declare
cursor c_emp is select ename from emp;
begin
for erow in c_emp loop
if erow.ename like'A%'then
update emp set sal=sal+sal*0.1where ename=erow.ename;
elsif erow.ename like'S%'then
update emp set sal=sal+sal*0.1where ename=erow.ename;
end if;
commit;
end loop;
end;
5.emp表中对所有雇员按他们基本薪水的10%给他们加薪,如果所增加后的
薪水大于5000卢布,则取消加薪。
declare
cursor c_emp is select * from emp;
begin
for erow in c_emp loop
if erow.sal*1.1<5000then
update emp set sal=sal+sal*0.1where ename=erow.ename;
end if;
commit;
end loop;
end;
三存储过程
----- 存储过程(dba声明,得授予dba权限): 封装了一组sql语句,提前编译好,效率较高 ,存储在服务端
-- 场景:网购:数据库发生什么改变
-- 库存量-1(update) ,订单增加(insert),钱(update),物流(insert) , 日志(insert) --- 语法
/*
create [or replace] procedure 存储过程名称(参数名 in|out 类型,....)
as | is
-- 声明变量
begin
-- 过程化语言
end;
*/
1.创建一个过程,能向dept表中添加一个新记录.(in参数)
create or replace procedure
insert_dept(p_deptno in number,p_dname in varchar2,p_loc in varchar2) is
begin
insert into dept values(p_deptno,p_dname,p_loc);
end;
--调用该存储过程
declare
begin
insert_dept(50,'DEVELOP','SHENGZ');
end;
2.创建一个过程,从emp表中输入雇员的姓名,返回该雇员的薪水值。(out
参数)
然后调用过程。
create or replace procedure
find_emp(p_name in varchar2,p_sal out number)
is
e_sal emp.sal%type;
begin
select sal into e_sal from emp where ename=p_name;
p_sal:=e_sal;
exception
when no_data_found then
p_sal:=0;
end;
--调用存储过程
declare
msal number(5);
begin
find_emp('SCOTT',msal);
dbms_output.put_line(msal);
end;
3.编写一个程序块,接受一个雇员号与一个百分数,从emp表中将该雇员的薪水增加输入的百分比。
(利用过程,in out 参数)
create or replace procedure addSal(p_empno in number,p_num in float) is
begin
update emp set sal=sal+sal*p_num where empno=p_empno;
exception
when no_data_found then
dbms_output.put_line('输入的员工编号有误');
end;
--访问存储过程
declare
begin
addSal(7788,0.5);
commit;
end;
存储函数
--- 存储函数:封装了一组sql语句,提前编译好,效率较高 ,存储在服务端
--- 存储函数必须有一个返回值,存储函数可以用select语句中
/**
create or replace function 函数名(参数名 in|out 类型,....)
return type
as | is
begin
return 值;
end;
*/
4.创建一个函数,它以部门号作为参数且返回那个部门的所有的雇员的整体薪水(其实就是该部门的平均工资)。
然后调用此函数。
create or replace function
getAllSal(f_deptno in number)
return number
is
e_sal emp.sal%type;
begin
select avg(sal) into e_sal from emp where deptno=f_deptno;
return e_sal;
exception
when no_data_found then
return0;
end;
--调用存储函数
select getAllSal(20) from dual;
5.创建一个函数,它以部门号作为参数传递并且使用函数显示那个部门名称与位置。
然后调用此函数。
create or replace function
showDnameAndLoc(f_deptno in number)
return dept%rowtype
as
e_row dept%rowtype;
begin
select * into e_row from dept where deptno=f_deptno;
return e_row;
end;
--访问存储函数
declare
erow dept%rowtype;
begin
erow:=showDnameAndLoc(20);
dbms_output.put_line(erow.dname ||' '|| erow.loc); end;
四触发器练习
----- 触发器(监听器):监听表中的数据是否发生了改变
-- 增删改操作
/*
create or replace trigger 触发器名
after | before 在改变之前还是之后执行触发器
insert | delete | update 监听表的哪个操作
on 表对哪张表的监听
触发器的级别:表级触发器,行级触发器
表级触发器不能使用old,new
行级触发器:可以使用old,new
declare
begin
end;
*/
1.创建一个行级别触发器,将从emp表中删除的记录输入到ret_emp表中。
create or replace trigger del_emp
after
delete
on emp
for each row
begin
insert into ret_emp values(:old.empno,:old.ename,:old.job,
:old.mgr,:old.hiredate,:old.sal,:https://www.360docs.net/doc/3816302473.html,m,:old.deptno);
end;
2.创建一个行级别触发器,停止用户删除雇员名为"SMITH"的记录。
create or replace trigger nodel_SMITH
before
delete
on emp
for each row
when (old.ename='SMITH')
begin
raise_application_error(20001,'不能删除该用户信息');
end;
3.创建一个语句级别触发器,不允许用户在"Sundays"使用emp表。
create or replace trigger control_emp
before
insert or update or delete on emp
begin
if to_char(sysdate,'DY','nls_date_language=AMERICAN')--显示系统当前日期以美国格式表示的名字缩写的一天
in('SUN') then
raise_application_error(-20001,'不允许在星期天操作emp表');
end if;
end;
Oracle测试题
一、选择题(40分) 1.Oracle发出下列select语句: SQL> select , , 2 from emp e, dept d 3 where = 4 and substr, 1, 1) = ‘S’; 下列哪个语句是Oracle数据库中可用的ANSI兼容等价语句 A.select empno, ename, loc from emp join dept on = where substr, 1, 1) = ‘S’; B.select empno, ename, loc from emp, dept on = where substr, 1, 1) = ‘S’; C.select empno, ename, loc from emp join dept where = and substr, 1, 1) = ‘S’; D.select empno, ename, loc from emp left join dept on = and substr, 1, 1) = ‘S’; 2.下列哪个选项表示Oracle中select语句的功能 A.可以用select语句改变Oracle中的数据 B.可以用select语句删除Oracle 中的数据 C.可以用select语句和另一个表的内容生成一个表 D.可以用select语句对表截断 3.你要操纵Oracle数据,下列哪个不是SQL命令 A.select * from dual; B.set define C.update emp set ename = 6543 where ename = ‘SMITHERS’; D.create table employees(empid varchar2(10) primary key); 4.你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用
ORACLE数据库期末考试题目及答案
期末考试卷(卷) 课程名称:数据库考试方式:开卷()闭卷(√) 、本试卷共4 页,请查看试卷中是否有缺页。 2、考试结束后,考生不得将试卷、答题纸带出考场。 1、以下(a )内存区不属于SGA。 A.PGA B.日志缓冲区 C.数据缓冲区 D.共享池 2、d )模式存储数据库中数据字典的表和视图。 (A.DBA B.SCOTT C.SYSTEM D.SYS 3、Oracle 中创建用户时,在若未提及DEFAULT TABLESPACE 关键字,Oracle 就将 c )则(表空间分配给用户作为默认表空间。A.HR B.SCOTT C.SYSTEM D.SYS
4、a )服务监听并按受来自客户端应用程序的连接请求。(A.OracleHOME_NAMETNSListener B.OracleServiceSID C.OracleHOME_NAMEAgent D.OracleHOME_NAMEHTTPServer 5、b )函数通常用来计算累计排名、移动平均数和报表聚合等。(A.汇总B.分析C.分组D.单行 6、b)SQL 语句将为计算列SAL*12 生成别名Annual Salary (A.SELECT ename,sal*12 …Annual Salary? FROM emp; B.SELECT ename,sal*12 “Annual Salary” FROM emp; C.SELECT ename,sal*12 AS Annual Salary FROM emp; D.SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp; 7、锁用于提供(b )。 A.改进的性能 B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 8、( c )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不允许插入、更新和删除行。 A.行共享B.行排他C.共享D.排他 9、带有( b )子句的SELECT 语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH
几个Oracle的笔试题
Oracle笔试试题 1. SQL必备 <选择题每空 1 分共 14题> 1. 如果在where子句中有两个条件要同时满足,应该用以下哪个逻辑符来连接 ( ) A.OR B.NOT C.AND D.NONE 2. 外连接的条件可以放在以下的那一个子句中( ) A.FROM B.WEHRE C.SELECT D.HAVING E.GROUP BY F.ORDER BY 3. 在从两个表中查询数据时,连接条件要放在哪个子句中( ) A.FROM B.WHERE C.SELECT D.HAVING E.GROUP BY 4. 用以下哪个子句来限制分组统计结果信息的显示( ) A.FROM B.WEHRE C.SELECT D.HAVING E.GROUP BY F.ORDER BY 5. 以下需求中哪个需要用分组函数来实现( ) A.把ORDER表中的定单时间显示成 'DD MON YYYY' 格式 B.把字符串 'JANUARY 28, 2000' 转换成日期格式 C.显示PRODUCT 表中的COST 列值总量 D.把PRODUCT表中的DESCRIPTION列用小写形式显示 6. 以下那些命令可以暗含提交操作( )
A.GRANT B.UPDATE C.SELECT D.ROLLBACK 7.RDBMS是下列哪一项的缩写( ) A. Relational DataBase Management System(关系数据库管理系统) B. Relational DataBase Migration System(关系数据库移植系统) C. Relational Data Migration System(关系数据移植系统) D. Relational DataBase Manage System(关系数据库管理系统) 8.INSERT 是( ) A. DML语句 B. DDL语句 C. DCL语句 D. DTL语句 9.SELECT CHR(66) FROM DUAL的结果是( ) A. Z B. S C. B D. 都不是 10.函数返回一个值除以另一个值后的余数( ) A. MOD B. ABS C. CEIL D. 以上都不是 11. 什么锁用于锁定表,仅允许其他用户查询表中的行,行不允许插入,更新, 或删除行( ) A. 共享 B. 排他 C. 共享更新 D. 以上都不是 12.什么是oracle提供的一个对象,可以生成唯一的连续的整数( ) A. 同义词 B. 序列 C. 视图 D. 没有 13. 那种类型的约束可以自动创建索引( ) A.CHECK B.UNIQUE
oracle数据库试题
ORACLE数据库试题 74 姓名:戴希引 一、选择题(总分50分,每题1分,*为多选)42 1.下列不属于ORACLE的逻辑结构的是(C) A 区 B 段 C 数据文件 D表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户( A ) A . SYSDBA B. SYSTEM C. SCOTT D. SYS 3 下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表(A ) A 授予了CONNECT的角色,但没有授予RESOURCE的角色 B没有授予用户系统管理员的角色 C数据库实例没有启动 D数据库监听没有启动 4. 在Oracle中,当FETCH语句从游标获得数据时,下面叙述正确的是( C ) A 游标打开 B游标关闭 C当前记录的数据加载到变量中 D创建变量保存当前记录的数据 5. 在Oracle中,下面关于函数描述正确的是( A D)* A SYSDATE函数返回Oracle服务器的日期和时间 B ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数 C ADD_MONTHS日期函数返回指定两个月份天数的和 D SUBSTR函数从字符串指定的位置返回指定长度的子串 6. 阅读下面的PL/SQL程序块: BEGIN INSERT INTO employee(salary,last_name,first_name)VALUES(35000,’Wang’,'Fre d ’); SAVEPOINT save_a; INSERT INTO employee(salary,last_name,first_name) VALUES(40000,’Woo’,'David’); SAVEPOINT save_b; DELETE FROM employee WHERE dept_no=10; SAVEPOINT save_c; INSERT INTO employee(salary,last_name,first_name) VALUES(25000,’Lee’,'Bert’); ROLLBACK TO SAVEPOINT save_c;
oracle考试试题及答案
试题一 一、填空题(每小题4分,共20分) 1、数据库管理技术经历了人工管理、文件系统、数据库系统三个阶段 2、数据库三级数据结构是外模式、模式、内模式 3、Oracle数据库中,SGA由数据库缓冲区,重做日志缓冲区,共享池组成 4、在Oracle数据库中,完正性约束类型有Primay key约束。Foreign key约束,Unique约束,check约束,not need约束 5、PL/SQL中游标操作包括声明游标,打开游标,提取游标,关闭游标 二、正误判断题(每小题2分,共20分) 1、数据库中存储的基本对象是数据(T) 2、数据库系统的核心是DBMS(T) 3、关系操作的特点是集合操作(T) 4、关系代数中五种基本运算是并、差、选择、投影、连接(F) 5、Oracle进程就是服务器进程(F) 6、oraclet系统中SGA所有用户进程和服务器进程所共享(T) 7、oracle数据库系统中数据块的大小与操作系统有关(T) 8、oracle数据库系统中,启动数据库和第一步是启动一个数据库实例(T) 9、PL/SQL中游标的数据是可以改变的(F) 10、数据库概念模型主要用于数据库概念结构设计() 三、简答题(每小题7分,共35分) 1、何谓数据与程序的逻辑独立性和物理独立性? 2、试述关系代数中等值连接与自然连接的区别与联系? 3、何谓数据库,数据库设计一般分为哪些阶段? 4、简述Oracle逻辑数据库的组成?
5、试任举一例说明游标的使用方法? 五、设有雇员表emp(empno,ename,age,sal,tel,deptno), 其中:empno-----编号,name------姓名,age -------年齡,sal-----工资,tel-----电话 deptno-----部门号。 请按下列要求分别晨SQL*PLUS下编程。(每小题3分,共15分)?1、查询家有电话的职工信息。 ?2、查询工资在500至800元之间的雇员信息 ?3、按年龄递增顺序显示雇员编号、姓名、年龄、工资 ?4、求部门号为D_01的平均工资 ?5、查找部门号为D_01的40岁以上而工资在400元以下的雇员名单。 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; ? 试题一答案 一、填空题 1、人工管理、文件系统、数据库系统 2、外模式、模式、内模式 3、数据库缓冲区,重做日志缓冲区,共享池 4、Primay key约束。Foreign key约束,Unique约束,check约束,not need 约束 5、声明游标,打开游标,提取游标,关闭游标 二、正误判断题 1、T 2、T 3、T 4、F 5、F 6、T 7、T 8、T 9、F 三、(略) 五、 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; 试题二
Oracle_DBA面试题
一. SQL tuning 类 1:列举几种表连接方式 hash join/merge join/nest loop(cluster join)/index join 2:不借助第三方工具,怎样查看sql的执行计划 set autot on explain plan set statement_id = &item_id for &sql; select * from table(dbms_xplan.display); 或者: SQL>EXPLAIN PLAN FOR SELECT * FROM EMP; SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); 3:如何使用CBO,CBO与RULE的区别 Rule Based Optimizer(RBO):基于规则 Cost Based Optimizer (CBO):基于成本,或者讲统计信息。 在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。 CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。 4:如何定位重要(消耗资源多)的SQL select sql_text from v$sql where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000); 5:如何跟踪某个session的SQL exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace); select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1); exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');
Oracle数据库试题及答案
Oracle数据库试题 一、选择题 1、段是表空间中一种逻辑存储结构,以下( D )不是ORACLE数据库使用的段类型。(A)索引段(B)临时段(C)回滚段(D)代码段 2、 ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A )。 ?(A)系统文件(B)日志文件(C)数据文件(D)控制文件 3、数据库中有两个用户scott和muuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( C ) (A)select*from scott.wz where wunit is null and rownum<5; (B)select*from myuser.wz where wunit = null and rownum<5; (C) select*from myuser.wz where wunit is null and rownum<6; (D)select*form scott.wz where wunit is null and rownum<6; ?4、若当前日期为’25-5月-06’,以下( D? )表达式能计算出5个月后那一天所在月份的最后一天的日期。 (A)NEXT_DAY(ADD_MONTHS(28-5月-06,5)) (B)NEXT_DAY(MONTHS_BETWEEN(28-5月-06,5)) (C)NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) (D)NEXT_DAY(ADD_MONTHS(’28-5月-06’,5)) 5、下列叙述中正确的是_C_。 A、数据库是一个独立的系统,不需要操作系统的支持 B、数据库设计是指设计数据库管理系统 C、数据库技术的根本目标是要解决数据共享的问题 D、数据库系统中,数据的物理结构必须与逻辑结构一致 6、SQL语句中修改表结构的命令是 ???C?? ?。 A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE 7、数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是__ A___。 A、DBS包括DB和DBMS B、DBMS包括DB和DBS C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS 8、要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表_A___。 A、是同一个数据库中的两个表 B、不同数据库中的两个表 C、两个自由表 D、一个是数据库表另一个是自由表 9、在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过__B_ __。 A、候选键 B、主键 C、外键 D、超键 10、索引字段值不唯一,应该选择的索引类型为___ B__。 A、主索引 B、普通索引 C、候选索引 D、唯一索引 11、从数据库中删除表的命令是___C __。 A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE 12、 DELETE FROM S WHERE 年龄>60语句的功能是___B___。 A、从S表中彻底删除年龄大于60岁的记录 B、S表中年龄大于60岁的记录被加上删除标记
Oracle数据库试题及答案word版本
O r a c l e数据库试题及 答案
Oracle数据库试题 一、选择题 1、段是表空间中一种逻辑存储结构,以下( D )不是ORACLE数据库使用的段类型。 (A)索引段(B)临时段(C)回滚段(D)代码段 2、 ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A )。(A)系统文件(B)日志文件(C)数据文件(D)控制文件 3、数据库中有两个用户scott和muuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( C ) (A)select*from scott.wz where wunit is null and rownum<5; (B)select*from myuser.wz where wunit = null and rownum<5; (C) select*from myuser.wz where wunit is null and rownum<6; (D)select*form scott.wz where wunit is null and rownum<6; 4、若当前日期为’25-5月-06’,以下( D )表达式能计算出5个月后那一天所在月份的最后一天的日期。 (A)NEXT_DAY(ADD_MONTHS(28-5月-06,5)) (B)NEXT_DAY(MONTHS_BETWEEN(28-5月-06,5)) (C)NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) (D)NEXT_DAY(ADD_MONTHS(’28-5月-06’,5))
Oracle精选面试题(附答案及分析)
Oracle精选面试题 1.显示10 号部门的所有经理('MANAGER')和20 号部门的所有职员('CLERK')的详细信息 答案: Select * from emp where deptno=10 and job=’MANAGER’ or deptno=20 and job=’clerk’; select * from emp where deptno = 10 and job = 'MANAGER' or deptno = 20 and job ='CLERK'; 2.显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息 答案: Select * from emp where ename note like ‘%L%’ or ename like ‘%SM%’; select * from emp where ename not like '%L%' or ename like '%SM%'; 3.显示各个部门经理('MANAGER')的工资 答案: select deptno,emname, salary from emp_wqq where job='MANAGER'; 4.显示佣金(COMM)收入比工资(SAL)高的员工的详细信息 答案: select * from emp where comm > sal; 5.把hiredate 列看做是员工的生日,求本月过生日的员工 答案: select * from emp where to_char(hiredate, 'mm') = to_char(sysdate , 'mm'); 6.把hiredate 列看做是员工的生日,求下月过生日的员工 答案: select * from emp where to_char(hiredate, 'mm') = to_char(add_months(sysdate,1) , 'mm'); 7.求1982 年入职的员工 答案: select * from emp where to_char(hiredate,'yyyy') = '1982'; 8.求1981 年下半年入职的员工 答案: select * from emp where hiredate between to_date('1981-7-1','yyyy-mm-dd') and to_date('1982-1-1','yyyy-mm-dd') - 1; 9.求1981 年各个月入职的的员工个数 答案: select count(*), to_char(trunc(hiredate,'month'),'yyyy-mm')
Oracle-选择题题库
Oracle 选择题题库 1.以下命令哪个是 SQL*PLUS 命令?() A.UPDATE B.EDIT C.SELECT D.ALTER TABLE 2.用SQL*PLUS的_____命令可以查看表的结构信息,包括列的名称和数据类型 A.DESCRIPTION B.DESC C.SHOW TABLE D.SHOW USER 3.Oracle的前端工具是() A.SQL*PLUS B.C++ C.PL/SQL D.JAVA 4.在SQL*PLUS中,如何运行SQL脚本程序( ) A./ B.@脚本C.EXE 脚本D.不能在SQL*PLUS中直接运行脚本5.用命令将SQL*PLUS缓冲区中的内容保存到文件中,使用下列哪种方法( ) A.将缓冲区的内容Ctrl+C,然后再Ctrl+V到文件中即可 B.使用SAVE命令参数是文件路径 C.WRITE 方式,参数是文件路径 D.Oracle会自动保存 6.用来设置一行能够显示的字符长度的命令是( ) A.SET LINESIZE B.SET LINE C.SET LINEBUFFER D.SET SIZELINE 7.以下哪个命令用来设置查询显示结果的列宽 A.SET COLUMN SIZE B.COLUMN 列 FORMAT 长度 C.COLUMN 列长度D.长度 OF COLUMN 8.ORACLE用来判断列值是否为空的操作符是____ A.= NULL B.IS NULL C.AS NULL D.NULL IS 9.在客户定单表(CUSTOMER)中有一列为单价(PRICE),写一个SELECT命令显示所有单价 在500以上的查询语句。 A SELECT * FROM CUSTOMER WHERE PRICE>500; B SELECT * FROM CUSTOMER WHERE PRICE BETWEEN 500 AND *; C SELECT * FROM CUSTOMER WHERE PRICE LIKE '%500%'; D SELECT * FROM CUSTOMER WHER E PRICE>=500; 10.分析以下SQL 命令: SELECT price FROM inventory WHERE price BETWEEN 1 AND 50 AND (price IN(55, 30, 95); 命令执行后的输出结果是:() A 55 B 30 C 95 D NULL 11.分析以下的SQL 命令: SELECT manufacturer_id FROM inventory WHERE manufacturer_id LIKE '%N\%P\%O%' ESCAPE '\'; 命令执行的返回结果是() A 所有包含'NPO'的纪录 B 所有包含'N\P\O'的纪录 C 所有包含'N%P%O'的纪录
ORACLE数据库工程师面试题目
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 t ables 存放对fact table 某些属性描述的信息
Oracle面试题及答案整理
Oracle面试题及答案整理
Oracle面试题及答案整理 1、表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段。 select fclass,max(fscore) from table1 group by fclass,fid 2、有一个表table1有两个字段FID,Fno,字都非空,写一个SQL语句列出该表中一个FID对应多个不同的Fno的纪录。 类如: 101a1001 101a1001 102a1002 102a1003 103a1004 104a1005 104a1006 105a1007 105a1007 105a1007 结果: 102a1002
102a1003 104a1005 104a1006 select t2.* from table1 t1, table1 t2 where t1.fid = t2.fid and t1.fno <> t2.fno; 3、有员工表empinfo ( Fempno varchar2(10) not null pk, Fempname varchar2(20) not null, Fage number not null, Fsalary number not null ); 假如数据量很大约1000万条;写一个你认为最高效的SQL,用一个SQL计算以下四种人: fsalary>9999 and fage > 35 fsalary>9999 and fage < 35 fsalary <9999 and fage > 35 fsalary <9999 and fage < 35 每种员工的数量; select sum(case when fsalary > 9999 and fage > 35 then 1 else 0end) as "fsalary>9999_fage>35",
oracle常见面试题及答案
需求: 写一个邮件系统, 采用oracle+jsp+servlet来完成. 1.创建一个表空间。 2.创建一个用户,将用户赋到表空间上. 3.给用户赋权限. 4.以新建用户登录,创建一个程序包. 5.在表空间上建表,两个表 用户表 Id int Uname varchar Upass varchar 邮件表 eId int Title varchar Contents varchar Uid int 外键 附件表 Id int Filepath varchar Eid int 外键 6.作增,删,改,查的操作,全部封装到存储过程中 7.写一个java程序来调用. 1.解释FUNCTION,PROCEDURE和PACKAGE区别 答:function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值, 而function将返回一个值. 在另一方面,Package是为了完成一个商业功能的一组function和procedure的集合。
2.取某个序列的当前值的PL/SQL语句怎么写? 答:SELECT 序列名.CURRVAL FROM DUAL; Create sequence 名字 start with x increment by y maxvalue z nocycle 3.说明ORACLE数据库实例与ORACLE用户的关系? 答:实例可以包含多个用户,一个用户只能在一个实例下 4.创建用户时,需要赋予新用户什么权限才能使它连上数据库? 答:grant CONNECT [on 表名] to 用户名 5.比较truncate和delete命令? 答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL(data defining language数据定义语言),它移动HWK,不需要rollback segment(处理事务回滚操作)而Delete是DML(data manufacturing language数据操作语言)操作,需要rollback segment(处理事务回滚操作)且花费较长时间 6.给出数据的相关约束类型? 答:主键约束,外键约束,非空约束,唯一约束,检查约束。 7.说明索引的类型与作用? 答:索引类型上分为聚集索引,非聚集索引. 其作用是加快查询速度。 8.获取某个字符字段的最后3个字符的函数是什么? 答:select substr (字段,(length(字段)-3)) from 表 9.取当前系统时间点日期(不包括年月)的SQL写法是怎样的? 答:Select substr (to_char(sysdate,’YYYYMMDDh24hh:MM:SS’),5) from dual; to_char(sysdate,’YYYYMMDDh24hh:MM:SS’) 10.返回大于等于N的最小整数值? 答:select ceil(1.5) from dual; floor(1.5) 11.将根据字符查询转换后结果,规则为:’A’转换为’男’,’B’转换为’女’,其他字符转换为’未知’,请用一个SQL语句写出。 答:select decode(字符,’A’,’男’,’B’,’女’,’未知’) from dual; 12.如何搜索出前N条记录? 答:select * from 表 where Rownum <= N;
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)
Oracle必背选择题
1.( )触发器允许触发操作的语句访问行的列值。(选一项) A、行级 B、语句级 C、模式 D、数据库级 2.( )是oracle在启动期间用来标识物理文件和数据文件的二进制文件。(选一项) A、控制文件 B、参数文件 C、数据文件 D、可执行文件 3.CREATE TABLE 语句用来创建(选一项) A、表 B、视图 C、用户 D、函数 4.imp命令的哪个参数用于确定是否要倒入整个导出文件。(选一项) A、constranints B、tables C、full D、file 5.ORACLE表达式NVL(phone,'0000-0000')的含义是(选一项) A、当phone为字符串0000-0000时显示空值 B、当phone为空值时显示0000-0000 C、判断phone和字符串0000-0000是否相等 D、将phone的全部内容替换为0000-0000 6.ORACLE交集运算符是(选一项) A、intersect B、union C、set D、minus 7.ORACLE使用哪个系统参数设置日期的格式(选一项) A、nls_language B、nls_date C、nls_time_zone D、nls_date_format 8.Oracle数据库中,通过()访问能够以最快的方式访问表中的一行(选一项) A、主键
B、Rowid C、唯一索引 D、整表扫描 9.Oracle数据库中,下面()可以作为有效的列名。(选一项) A、Column B、123_NUM C、NUM_#123 D、#NUM123 10.Oracle数据库中,以下()命令可以删除整个表中的数据,并且无法回滚(选一项) A、drop B、delete C、truncate D、cascade 11.Oracle中, ( )函数将char或varchar数据类型转换为date数据类型。(选一项) A、date B、to_date C、todate D、ctodate 12.ORACLE中,执行语句:SELECT address1||','||address2||','||address2 "Address" FROM employ; 将会返回()列(选一项) A、0 B、1 C、2 D、3 13.Oralce数据库中,以下()函数可以针对任意数据类型进行操作。(选一项) A、TO_CHAR B、LOWER C、MAX D、CEIL 14.partition by list(msn_id)子句的含义是(选一项) A、按msn_id列进行范围分区 B、按msn_id列进行列表分区 C、按msn_id列进行复合分区 D、按msn_id列进行散列分区 15.比较pagesize和linesize两个命令的特点,正确的是(选两项) A、pagesize命令用于设置屏幕上每一页包含的行数 B、linesize命令用于设置屏幕上每一行的字符数
oracle模拟试题答案汇总
备注:题号相同的题目或者增加的一些题目是11级网络的模拟试题 第 1 题,选择题(2分): ORACLE中,游标可以分为三类,下面不是Oracle游标的是( 1 )。 (1) 系统游标 (2) 显式游标 (3)隐式游标 (4) REF游标 第 2 题,选择题(2分):PL/SQL块中定义了一个带参数的游标:CURSOR emp_cursor(dnum NUMBER) IS SELECT sal,comm FROM emp WHERE deptno=dnum; 那么正确打开此游标的语句是(1) (1) OPEN emp_cursor(20); (2) OPEN emp_cursor FOR 20; (3) OPEN emp_cursor USING 20; (4) FOR rmp_rec IN emp_cursor[20] LOOP ... END LOOP; 第 3 题,选择题(2分): 有关ORACLE索引说法正确的是(A ) (1) 索引的数据和表的数据分开存储,但索引组织表除外 (2) 所有索引中的数据是顺序排序 (3) 分区表的索引必须统一存储 (4) 只能对分区表的索引进行分区 第 4 题,选择题(2分): 下列有关包的使用说法错误的是( A) (1) 必须先创建包头,然后创建包体 (2) 在不同的包内模块可以重名 (3) 包的私有过程不能被外部程序调用 (4) 包体中的全局过程和函数必须在包 第 5 题,选择题(2分): 以下定义的哪个变量是非法的?( A) (1) var_ab number default:=1; var_ab number default 1; (2) var_ab number not null :='0'; (3) var_ab number; (4) var_ab number:=3; 第 6 题,选择题(2分): PL/SQL块中不能直接使用的SQL命令是(A) (1) drop (2) insert (3) update
Oracle面试题库1
1 PL/SQL代表 A PROCEDURAL LANGUAGE/SQL B PROGRAM LANGUAGE SQL C POWER LANGUAGE SQL D 都不对 2 _____引擎执行PL/SQL块 A SQL B PL/SQL C ORACLE D 都不对 3 一个对象可以呈现多种形式的能力称为 A 多态 B 继承 C 封装 D 以上都不对 4 PLSQL块是由哪几个部分组成 A DECLARE BEGIN END B BEGIN END C EXCEPTION BEGIN END D DECLAR E BEGIN EXCEPTION END 5 看下面代码,正确的是 A DECLARE (‘定义部分’); BEGIN (‘语句部分’); END; B BEGIN NUM NUMBER:=100; (‘NUM 的值为:’||NUM); END; C DECLARE NUM NUMBER:=100; BEGIN NUM:=NUM+NUM/2; (‘NUM 的值为:’||NUM); END; D BEGIN NUM NUMBER:=100; DECLARE NUM:=NUM+NUM/2; (‘NUM 的值为:’||NUM); END;
6 看下面语句正确的是 A IF(N%M=0) THEN (‘这是一个偶数’); ELSEIF(N%M=1) THEN (‘这是一个奇数’); END IF; B DECLARE VAR NUMBER:=0; BEGIN VAR:=&V; CASE WHEN VAR=1 THEN (‘A’); WHEN VAR=2 THEN (‘B’); ELSE (‘O’); END CASE; END; C DECLARE I NUMBER:=0; BEGIN FOR I IN 10..20 LOOP (I); END LOOP; END; D LOOP (I); END LOOP; 7. 当在一个PLSQL块中通过查询得到一个值,但是没有任何值返回时,会产生异常吗如果产生,是什么异常? A 不会有异常,只不过没有结果而已 B 有异常,异常为No_data_found C 有异常,异常为Value_erro D 编译都不通过 8. 在PLSQL块中处理异常的语句是 A EXCEPTION IF EXCEPTION_NAME THEN (); END; B EXCEPTION WHEN EXCEPTION_NAME THEN