Oracle经典练习题(很全面)讲解学习

Oracle经典练习题(很全面)讲解学习
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

相关文档
最新文档