做的不一定对,有错误可以告诉我。
Excise 1.1
理论练习
1、Oracle是__ 对象关系型 __数据库管理系统。
2、Oracle 9i中的i和Oracle 10g、Oracle11g中的g各代表什么意思。
I:Internet,因特网
G:grid,网格计算
3、Oracle11g中的g表示(C)。
A 网络 B 数据库 C 网格计算 D 版本
面试笔试题
1、Oracle跟SQL Server 2005的区别?
1. 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性
2. oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL
2、对数据库SQL2005、Oracle熟悉吗?
3、数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是___A___。(选择1项)
A)DBS包括DB和DBMS B)DBMS包括DB和DBS
C)DB包括DBS和DBMS D)DBS就是DB,也就是DBMS
Excise 1.2
理论练习
1、 完全卸载Oracle 11g时,需要进行的第一步操作是( A )。
A 停止所有的Oracle服务 B 启动Oracle的卸载向导
C 删除磁盘上的Oracle文件 D 删除数据库Orcl
2、 安装Oracle数据库过程中SID指的是什么( B )。
A 系统标识号 B 数据库名 C 用户名 D 用户口令
上机练习
1、 下载Oracle安装包,在本机安装Oracle数据库
登录U+账号后,点击此处下载。
2、 在本机卸载Oracle数据库
1. 停用oracle服务:进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止
2. 在开始菜单中,找到Universal Installer,运行Oracle Universal Installer,单击卸载产品
3. 在产品清单窗口中,单击全部展开,除了OraDb11g_home1外,勾选其他项目,单击删除
4. 按Windows徽标键和R键,打开运行窗口,输入regedit,打开注册表,依次展开HKEY_LOCAL_MACHINE\SOFTWARE,找到oracle,删除
5. 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中,删除所有oracle开头的项
6. 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有oracle开头的项;
7. 重启电脑,删除oracle目录,删除Oracle的安装目录app等
Excise 1.3
理论练习
1、 Oracle网络配置分为服务器端和客户端,监听程序的配置是在__服务器端___ 。
2、 监听程序与Net服务名的关系是怎样的?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDcPq32Y-1609048919433)(img/p1.3.1.png)]
监听程序:Oracle…TNSListener
Net服务名:OracleService…
上机练习
1、完成Oracle数据库监听器及客户端的配置
Excise 1.4
理论练习
1、 要开启Oracle服务器,必须开启的两个服务是( D )。
A.OracleHOME_NAMETNSListener和OracleHOME_NAMEAgent
B.OracleServiceSID和OracleHOME_NAMEHTTPServer
C.OracleHOME_NAMEAgent和OracleServiceSID
D.OracleHOME_NAMETNSListener和OracleServiceSID
上机练习
1、 查看Oracle数据库安装后,系统的服务增加了哪些,开启相关服务,启动Oracle数据库
2、 关闭相关服务,关闭Oracle数据库
Excise 1.5
理论练习
1、 Oracle服务器的两个主要组件:_ 文件_、__ 内存__ 。
2、 实例由__Oracle DB___ 和___Oralce Server__ 组成。
3、 Oracle的物理结构包括___数据文件___、___控制文件___、___日志文件___。
4、 当Oracle服务器启动时,下列哪种文件不是必须的( D )。
A 数据文件 B 控制文件 C 日志文件 D 归档日志文件
5、 在Oracle中,一个用户拥有的所有数据库对象统称为( B )。
A 数据库 B 模式 C 表空间 D 实例
6、 在Oracle数据库的逻辑结构中有以下组件:ABCD
A 表空间 B 数据库 C 区 D 段
这些组件从大到小依次是( B-A-D-C )
A A->B->C->D B A->D->C->B C A->C->B->D D D->A->C->B
7、 在Windows操作系统中,Oracle的( B )服务器监听并接受来自客户端应用程序的连接请求。
A OracleHOME_NAMETNSListener B OracleServiceSID
C OracleHOME_NAMEAgent D OracleHOME_NAMEHTTPServer
8、 关于模式的描述下列哪一项不正确?( C )
A 表或索引等模式对象一定属于某一个模式
B 在Oracle数据库中,模式与数据库用户是一一对应的
C 一个表可以属于多个模式
D 一个模式可以拥有多个表
9、判断:Oracle数据库的表空间内存的逻辑对象为段,段由盘区组成,而盘区又由多个数据块组成。( 对 )
面试笔试题
1、介绍一下oracle的体系结构?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ORWBREpW-1609048919438)(img/p1.5.1.png)]
2、下列不属于Oracle逻辑结构的是( C )。
A 区 B 段 C 数据文件 D 表空间
3、Oracle中有哪几种文件?
数据文件、控制文件、日志文件
4、解释data block , extent , segment和tablespace的区别?
@import “img\数据库存储总图.png”
block:块,最小的数据管理单位
extent:区:存储分配的最小单位
segment:段,一个或多个连续的区组成
tablespace:表空间
数据库由一个或多个表空间组成
表空间由一个或多个数据文件组成,一个表空间包含多个段
段由一个或多个区组成
区是数据文件中一个连续的分配空间,由一个或多个块组成
块是数据库中最小、最基本的单位,是数据库使用的最小的I/O单元
每个用户都有一个对应的方案
Excise 1.6
上机练习
1、 使用Oracle 11g特有的企业管理器连接Oracle数据库
2、 使用Oracle自带的客户端工具sqlplus连接Oracle数据库
@import “img/p1.6.2.png”
3、 安装PLSQL Developer图形化工具,并使用该客户端工具连接Oracle数据库
@import “img/p1.6.3.png”
Excise 2.1
理论练习
1、 判断:表空间是Oracle最大的逻辑组成部分。Oracle数据库由一个或多个表空间组成。一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间。( 错 )数据库
2、 判断:表空间分为永久表空间和临时表空间两种类型。( 错 )系统/非系统
3、 判断:Oracle数据库的逻辑存储结构主要由表空间构成。( ? )
上机练习
1、 在Web版企业管理器中,创建名称为mytablespace的表空间。为表空间增加一个名为datafile01的数据文件,大小为100M。然后编辑该表空间,为其添加一个datafile02的数据文件,大小为50M。
2、 在PLSQL Developer中创建用户myname,密码为123456,将其默认的表空间修改为mytablespace。
@import “code\2.1.1.ans.sql”
3、 在sqlplus中创建名称为user_data的表空间,为表空间增加一个名为user_data的数据文件,大小为50M;创建名称为user_temp的临时表空间,并增加一个名为user_temp的数据文件,大小为50M。
删除创建成功的表空间与临时表空间。
@import “code\2.1.2.ans.sql”
面试笔试题
1、在Oracle中创建用户时,若未提及DEFAULT TABLESPACE关键字,则Oracle就将___C___
表空间分配给用户作为默认表空间。
A)HR B)SCOTT C)SYSTME D)SYS
Excise 2.2
理论练习
1、 下面哪个用户不是Oracle缺省安装后就存在的用户( A )。
A SYSDBA B SYSTEM
C SCOTT D SYS
上机练习
1、 在SQL*PLUS下创建用户qst,密码为123456,默认表空间为user_data,临时表空间为user_temp;
修改用户qst密码为123;
锁定和解锁用户qst;
删除用户qst
@import “code/2.2.2.sql”
2、 在PLSQL Developer中创建用户qst1,密码为123456,默认表空间为user_data,临时表空间为user_temp;
修改用户qst1密码为123;
锁定和解锁用户qst1;
删除用户qst1
@import “code/2.2.2.ans.sql”
面试笔试题
1、 Oracle有哪些用户?其默认口令和权限是什么?
sys | system | scott |
---|---|---|
manager | manager | tiger |
Excise 2.3
理论练习
1、 判断:DBA角色具有全部系统权限。( 错 )
2、 判断:每一个数据库用户必须具有RESOURCE角色才能登录到Oracle数据库中,所以RESOURCE角色用户是权限最低的用户。( 错 )
上机练习
1、 在SQL*PLUS下为用户qst赋予连接数据库的权限,以及访问scott中emp表的权限;
@import “code/2.3.1.ans.sql”
2、 在SQL*PLUS下对用户qst回收连接数据库的权限,以及访问scott中emp表的权限;
@import “code/2.3.2.ans.sql”
3、 在SQL*PLUS下为用户qst赋予连接并访问数据库的角色:connect,resource;
@import “code/2.3.3.ans.sql”
4、 在SQL*PLUS下实现权限的传递:scott用户中对emp表的访问权限通过权限传递授予qst,用户qst再把该权限授予qst1;
@import “code/2.3.4.ans.sql”
5、 在SQL*PLUS下创建角色、删除角色;
@import “code/2.3.5.ans.sql”
6、 在PLSQL Developer中为用户qst1赋予连接并访问数据库的角色:connect,resource
SQL> grant connect,resource to qst1;
Grant succeeded
面试笔试题
1、下面哪个操作会导致用户连接到Oracle数据库,但不能创建表( A )。
A 授予了CONNECT的角色,但没有授予RESOURCE的角色
B 没有授予用户系统管理员的角色
C 数据库实例没有启动
D 数据库监听没有启动
2、授予sa用户在SCOTT.EMP表中SAL列的更新权限的语句是( C )。
A GRANT CHANGE ON SCOTT.EMP TO SA
B GRANT UPDATE ON SCOTT.EMP(SAL) TO SA
C GRANT UPDATE (SAL) ON SCOTT.EMP TO SA
D GRANT MODIFY ON SCOTT.EMP(SAL) TO SA
Excise 3.1
理论练习
1、 SQL缩写的含义是__结构化查询语言,_Structured_Query_Language___。
2、 SQL语言的组成包括___数据定义语言(DDL) 、数据操作语言(DML)_、___数据控制语言(DCL)___、___事务控制语言(TCL)___四种。
3、 简述DDL、DML、DCL、TCL缩写分别代表的含义是什么,其包含的SQL语句分别有哪些?
数据定义语言(DDL,Data Definition Language):创建或删除表格。也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
CREATE/ALTER DATABASE、CREATE/DROP/ALTER TABLE、CREATE/DROP INDEX
数据操作语言(DML,Data Manipulation Languag):供用户实现对数据的增删改查等操作。
SELECT、UPDATE、DELETE、INSERT INTO
数据控制语言(DCL):
事务控制语言(TCL):
4、常用的伪列有哪两个,他们之间的区别是怎样的?
面试笔试题
1、 用来存放可变长度字符串的类型是:____VARCHA2。
2、 关于类型定义Number(9,2)说法正确的有___B___。
A)整数部分9位,小数部分2位,共11位 B)整数部分7位,小数部分2位,共9位
C)整数部分6位,小数点一位,小数部分2位,共9位 D)以上说法均不正确
3、 在PL/SQL块中定义一个名为PI值为3.14的常量的语法是____D___。
A)PI Const number=3.14; B)PI Real number =3.14;
C)Constant PI number:=3.14 D)PI Constant number:=3.14
4、 ___C__consta_是指组成表的各列的名称及数据类型,也就是日常表格的“栏目信息”。
A)表型 B)记录 C)字段 D)关键字
Excise 3.2
理论练习
1、 数据定义语言,缩写为____DDL____ ,用于改变数据库结构,包括创建、_____删除____ 和 _____ 更改____数据库对象。
2、 用于操纵表结构的数据定义语言命令有哪些?
create/drop/alter/truncate
3、 Truncate与Drop的区别是什么?
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。DROP删除表定义及其数据。
上机练习
1、 某学校要建立一个学生选课系统,分为以下三张表:
1.s学生表:
字段名称 | 数据类型 | 是否可为空 |
---|---|---|
学号(PK)sno | varchar2(10) | 否 |
学生姓名sname | varchar2(20) | 是 |
2.c课程表:
字段名称 | 数据类型 | 是否可为空 |
---|---|---|
课程号(PK)cno | varchar2(5) | 否 |
课程名称cname | varchar2(20) | 是 |
任课老师cteacher | varchar2(20) | 是 |
3.sc学生选课表
字段名称 | 数据类型 | 是否可为空 |
---|---|---|
学号sno(FK) | varchar2(10) | |
课程号cno(FK) | varchar2(5) | |
成绩scgrade | varchar2(20) | 否 |
①请依次创建这三张表。
SQL>
SQL> create table s(
2 sno varchar2(10) primary key,
3 sname varchar2(20)
4 );
Table created
SQL> create table c(
2 cno varchar2(5) primary key,
3 cname varchar2(20),
4 cteacher varchar2(20)
5 );
Table created
SQL> create table sc(
2 sno varchar2(10),
3 cno varchar2(5),
4 scgrade varchar2(20) not null,
5 foreign key(sno) references s(sno),
6 foreign key(cno) references c(cno)
7 );
Table created
②修改表s,为其增加一列stel(电话);
SQL> alter table s add tel varchar2(11);
Table altered
③修改表c,将其“课程名称”列的数据类型长度增加一倍;
SQL> alter table c modify cname varchar2(40);
Table altered
④修改表sc,将其“成绩”列名改为“总分”;
@import “code\3.2.4.sql”
⑤删除表c;
@import “code\3.2.5.sql”
⑥重命名表s为ss;
@import “code\3.2.6.sql”
面试笔试题
1、 表userInfo中有三个字段(userID、userName、userAddress),现在要删除字段 userAddress,正确的命令是____B___。
A)UPDATE userInfo DROP COLUMN userAddress
B)ALTER TABLE userInfo DROP COLUMN userAddress
C)ALTER userInfo DROP COLUMN userAddress
D)ALTER TABLE userInfo DELETE COLUMN userAddress
2、要将表userInfo从数据库中删除,所用的命令是:______drop table userInfo;_________。
3、SQL语言中,用来创建、修改及删除数据库对象的语言被称为:数据库操作语言_。
4、比较truncate、delete和drop命令。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。
新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。
如果要删除表定义及其数据,请使用 DROP TABLE 语句。
Excise 3.3
理论练习
1、 根据数据完整性机制所作用的数据库对象和范围不同,数据完整性可分为____ 实体完整性 、__ 域完整性 ______、 ____ 参照完整性 ____ 、______用户自定义完整性____四种类型。
2、 对实体完整性进行约束的方法有___非空约束___、___唯一约束___。
3、 对引用完整性进行约束的方法可以是____ 添加外键约束____。
4、 在数据完整性当中,____域完整性____可以用检查约束、非空约束,或者默认值方法进行约束。
5、 在数据完整性当中,可以用触发器进行约束的是________。
6、 常见的五大约束分别为____主键约束、非空约束、唯一约束、检查约束__、默认约束。
上机练习
1、 结合视频和综合设计题1,完成表的创建,并添加相应的约束。
2、 在3.2章节“上机练习”中,为表s的sno,表c的cno添加主键约束;为表sc中的sno和cno添加外键约束,scgrade列添加非空约束;为 表s中新添加的的stel列添加唯一约束。
SQL> alter table s add constraint PK_s_sno primary key(sno);
Table altered
SQL> alter table c add constraint PK_c_cno primary key(cno);
Table altered
SQL> alter table sc add constraint FK_sc_sno foreign key(sno) references s(sno);
Table altered
SQL> alter table sc add constraint FK_sc_cno foreign key(cno) references c(cno);
Table altered
SQL> alter table sc modify scgrade constraint NN_sc_scgrade not null;
Table altered
SQL> alter table s add constraint UN_s_tel unique(tel);
Table altered
3、 新创建一张带有约束的雇员表emptest,表结构如下:
属性 | 数据类型 | 相应约束 |
---|---|---|
员工编号 | number(3) | 主键 |
姓名 | varchar2(20) | 非空 |
性别 | varchar2(2) | 默认为“男”,且性别只能为“男”或“女” |
生日 | date |
请问该如何创建这张表?
@import “code\3.3.3.sql”
面试笔试题
1、唯一约束与主键约束的一个区别是___D____?
A)唯一约束的列的值不可以有重复值 B)唯一约束的列的值可以不是唯一的
C)唯一约束的列不可以为空值 D)唯一约束的列可以为空值
2、在关系数据库中,建立数据库表时,将年龄字段值限制在12~40岁之间的这种约束属于___B___。
A)视图完整性约束 B)域完整性约束 C)参照完整性约束 D)实体完整性约束
3、假设需要为表 customer 添加主键约束,主键列为 customer_id,可以使用如下____BD____
方式。(选择2项)
A)Alter table CUSTOMER ADD pk_customer primary key (“customer_id”);
B)Alter table CUSTOMER ADD primary key (“customer_id”);
C)Alter table CUSTOMER ADD constraint pk_customer (“customer_id”);
D)Alter table CUSTOMER ADD constraint pk_customer primary key (“customer_id”);
4、Oracle会为______主键________约束自动建立索引。
5、 已知关系:厂商(厂商号,厂名)PK=厂商号
产品(产品号,颜色,厂商号)PK=产品号,FK=厂商号,表如下:
厂商号 | 厂名 |
---|---|
C01 | 宏达 |
C02 | 利仁 |
C03 | 广源 |
产品号 | 颜色 | 厂商号 |
---|---|---|
P01 | 红 | C01 |
P02 | 黄 | C03 |
若再往产品表中插入如下记录:
I(P03,红,C02)
II(P01,蓝,C01)
III(P04,白,C04)
IV(P05,黑,null)
能够插入的记录是___D____。
A)I,II,IV B)I,III C)I,II D)I,IV
6、在以下哪几种情况下使用唯一约束而不使用主键约束:AB_ (选择2项)
A)列或几个列的组合不是主键 B)列的值允许为空值
C)列有外键引用 D)列的值不允许为空值
Excise 3.4
理论练习
1、 数据操纵语言,缩写为____DML,主要用于增加___、____删除和更改____数据。
2、 ______查询_____是最常见的SQL命令。
3、 数据操纵语言命令包括___INSERT___ 、__ DELETE 、_UPDATE、___。
上机练习
1、 在3.2章节的“上机练习”中,向s表中插入数据。插入内容如下:
学号 | 姓名 | 电话 |
---|---|---|
10001 | 王晓明 | 13112341118 |
10002 | 王涵 | 13212341118 |
10003 | 李有才 | 13312341118 |
10004 | 张小小 | 13412341118 |
10005 | 董强 | 13512341118 |
SQL> insert into s values(10001,'王晓明',1312341118);
1 row inserted
SQL> insert into s values(10002,'王涵',1312341118);
1 row inserted
SQL> insert into s values(10003,'李有才',1312341118);
1 row inserted
SQL> insert into s values(10004,'张小小',1312341118);
1 row inserted
SQL> insert into s values(10005,'董强',1312341118);
1 row inserted
2、 生成一个新的表s1,表结构与s表基本一致,有“学号”和“姓名”两列,表中内容如下:
学号 | 姓名 |
---|---|
10001 | 王晓明 |
10002 | 王涵 |
要求用旧表s生成新表s1去实现。
从旧表变成新表,需要从三列变两列。旧表非空,所以需要先使用truncate清空表。删除的列无外部约束,可以直接删除。
SQL> create table s1 as select * from s;
Table created
SQL> truncate table s1;
Table truncated
SQL> alter table s1 drop column tel;
Table altered
-- ORA-12988: 无法删除属于 SYS 的表中的列(可能报错,换个用户就好了)
3、 修改s表中的数据,将董强的电话改为13612341118。
SQL> update s set tel='13612341118' where SNAME='董强';
1 row updated
4、 查询修改后的s表中的全部信息。
SQL> select * from s;
SNO SNAME TEL
---------- -------------------- -----------
10001 王晓明 1312341118
10002 王涵 1312341118
10003 李有才 1312341118
10004 张小小 1312341118
10005 董强 13612341118
5、 删除s1表中的学号列。
SQL> alter table s1 drop column sno;
Table altered
面试笔试题
1、 比较Truncate和Delete命令。
delete:删除表中的某些记录
trancate:删除表中的所有记录,仅保留表结构。
2、 简述oracle中,dml、ddl、dcl的使用。
DML:SELECT、INSERT、UPDATE、DELETE
DDL:CREATE TABLE、 ALTER TABLE、DROP TABLE、CREATE INDEX、DROP INDEX
DCL :ALTER、GRANT、REVOKE、CREATE
3、下列哪些语句属于DML语句___AD____?(选择2项)
A)select count(*) from dba_tables; B)create table test (a number);
C)alter table test nologging; D)delete from test;
4、UPDATE-SQL语句的功能是___D____。
A)属于数据定义功能 B)属于数据查询功能
C)可以修改表中某些列的属性 D)可以修改表中某些列的内容
5、使用SQL命令将STUDENT中的学生年龄AGE字段值增加1岁,应该使用的命令是___D____。
A)REPLACE AGE WITH AGE+1 B)UPDATE STUDENT AGE WITH AGE+1
C)UPDATE SET AGE WITH AGE+1 D)UPDATE STUDENT SET AGE=AGE+1
6、要删除表userInfo中的所有记录,用_________trancate table userInfo;和_delete * from userInto;________两个命令实现?
Excise 3.5
理论练习
1、 为用户提供权限控制命令的语言是___数据控制语言_____,其缩写为____DCL _____。
2、 用于权限控制的命令有____REVOKR和GRANT____。
上机练习
1、 假设用户student2创建了表s,表s的表结构和数据参见3.3、3.5章节。现要求把查询、修改表s的权限赋予普通用户student1,该如何操作?
切换用户sys,
grant select,update on s to studente1;
2、 收回student1对表s进行修改的权限,该如何操作?
revoke select,update on s from studente1;
面试笔试题
1、REVOKE 是属于__C___语句?
A)DQL B)DML C)DDL D)DCL
2、GRANT 语句是___C__语句?
A)DQL B)DML C)DDL D)DCL
Excise 3.6
理论练习
1、 _____事务____是指作为一个逻辑单元整体进行工作的一系列操作。
2、 用于事务控制的语句有___BEGIN______ 、____ ROLLBACK _____ 、____COMMIT_____。
3、 事务应该具有四个属性,分别为___原子性____ 、 ____ 一致性___ 、 ___ 隔离性 ____ 、 ___ 持续性____。这四个属性通常称为事务的 ____ 四大 ____特性。
上机练习
1、 向3.2章节“上机练习”中的s表添加两行数据,添加后设置保存点p1,应该如何操作?添加的数据内容如下
学号 | 姓名 | 电话 |
---|---|---|
10010 | 孙燕姿 | 18600001111 |
10020 | 周杰伦 | 18900002222 |
SQL> insert into s values(10010,'孙燕姿','18600001111');
1 row inserted
SQL> insert into s values(10020,'周杰伦','18900002222');
1 row inserted
SQL> savepoint p1;
Savepoint created
2、 更新学号为10020的电话为18000000000,更新后设置保存点p2,应该如何操作?
SQL> update s set tel='18000000000' where sno='10020';
1 row updated
SQL> savepoint p2;
Savepoint created
3、 删除学号为10010的学生记录,删除后设置保存点p3,应该如何操作?
SQL> delete from s where sno='10010';
1 row deleted
SQL> savepoint p3;
Savepoint created
4、 分别回滚到p1,p2,p3的状态,查看表s中数据的变化;
错了,应该是分别回到p3,p2,p1的状态。这是p1,p2,p3的情况:因为回到了p1,所以p2和p3就不存在了。
报错: ORA-01086: 从未在此会话中创建保存点 'P2' 或者该保存点无效
SQL> select * from s;
SNO SNAME TEL
---------- -------------------- -----------
10020 周杰伦 18000000000
SQL> rollback to p3;
Rollback complete
SQL> select * from s;
SNO SNAME TEL
---------- -------------------- -----------
10020 周杰伦 18000000000
SQL> rollback to p2;
Rollback complete
SQL> select * from s;
SNO SNAME TEL
---------- -------------------- -----------
10010 孙燕姿 18600001111
10020 周杰伦 18000000000
SQL> rollback to p1;
Rollback complete
SQL> select * from s;
SNO SNAME TEL
---------- -------------------- -----------
10010 孙燕姿 18600001111
10020 周杰伦 18900002222
5、 最后提交操作,查看表s中数据的变化。
SQL> commit;
Commit complete
SQL> select * from s;
SNO SNAME TEL
---------- -------------------- -----------
10010 孙燕姿 18600001111
10020 周杰伦 18900002222
面试笔试题
1、________包含了一组数据库操作命令,并且所有的命令作为一个整体一起向系统提交或撤消操作请求。
Excise 4.1
理论练习
1、在属性前添加_____unique_____关键字可以保证表中该属性下没有重复的字段。
2、对查询结果进行排序的关键字是_____order by_____。
3、模糊查询中,’%’和’_’的区别是什么?
%:代表一或多个字符
_:代表一个字符
上机练习
1、 下面的语句是否可以执行成功?
select ename , job , sal as salary from emp; 对
2、 下面的语句是否可以执行成功?
select * from emp; 对
3、 找出下面语句中的错误:
select empno , ename sal * 12 ANNUAL SALARY from emp
改:
select empno , ename,sal*12 “ANNUAL SALARY” from emp;
4、 显示表dept的结构,并查询其中的全部数据。
@import “code/4.1.4.sql”
5、 显示出表emp中的不重复的岗位job。
@import “code/4.1.5.sql”
6、 选择员工姓名的第三个字母是A的员工姓名。
@import “code/4.1.6.sql”
7、 选择姓名中有字母A和E的员工姓名。
@import “code/4.1.7.sql”
面试笔试题
1、在表authors中查找以 ean 结尾的所有4个字母的作者所在的行。
请选择以下正确的语句____A___。
A)SELECT * FROM authors WHERE au_fname LIKE ‘_ean’
B)SELECT * FROM authors WHERE au_fname LIKE ‘%ean’
C)SELECT * FROM authors WHERE au_fname LIKE ‘[_ean]’
D)SELECT * FROM authors WHERE au_fname LIKE ‘[%]ean’
2、下列的哪个子句在SELECT语句中用于排序结果集___D____?
A)Having子句 B)Where子句 C)From子句 D)Order by子句
3、使用SQL语句从表STUDENT中查询所有姓王的同学的信息,正确的命令是___A____。
A)SELECT * FROM STUDENT WHERE LEFT(姓名,2)=’王’
B)SELECT * FROM STUDENT WHERE RIGHT(姓名,2)=’王’
C)SELECT * FROM STUDENT WHERE TRIM(姓名,2)=’王’
D)SELECT * FROM STUDENT WHERE STR(姓名,2)=’王’
4、___unique_____能够去掉查询中重复的行。
5、‘P%’表示__C____。
A)以P开头 B)以P结束 C)第二个字母是P D)右面第二个字母是P。
6、在表emp中查找字段empno中以两个数字开头第三个字符是下画线“_”的所有记录。
请选择以下正确的语句___D____:
A)SELECT * FROM employee WHERE empid LIKE ‘[0-9][0-9]_%’
B)SELECT * FROM employee WHERE empid LIKE ‘[0-9][0-9]_[%]’
C)SELECT * FROM employee WHERE empid LIKE ‘[0-9]9[_]%’
D)SELECT * FROM employee WHERE empid LIKE ‘[0-9][0-9][_]%’
Excise 4.2
上机练习
1、 对scott用户下的表进行多表链接查询:
① 在一张表中,显示所有员工的姓名ename,部门号deptno和部门名称dname。
@import “code\4.2.1.sql”
② 查询20号部门员工的job和20号部门的loc。
@import “code\4.2.2.sql”
③ 选择所有有奖金comm的员工的ename , dname , loc。
@import “code\4.2.3.sql”
④ 选择在DALLAS工作的员工的ename , job , deptno, dname。
@import “code\4.2.4.sql”
⑤ 选择所有员工的姓名ename,员工号deptno,以及他的管理者mgr的姓名ename和员工号deptno,结果类似于下面的格式
employees | Emp | manager | Mgr |
---|---|---|---|
SMITH | 7369 | FORD | 7902 |
@import “code\4.2.5.sql”
⑥ 查询各部门员工姓名和他们所在位置,结果类似于下面的格式
Deptno | Ename | Loc |
---|---|---|
20 | SMITH | DALLAS |
@import “code\4.2.6.sql”
Excise 4.3
理论练习
1、 聚合函数中,表示最小值的函数是____ MIN() ____ ,表示最大值的函数是____MAX()_____ ,求和函数是___SUM()_____ ,求平均值的函数是____AVG()____ ,用来计数的函数是___COUNT()_____ 。
2、 对记录的分组是通过关键字_____GROUP BY_____实现的。
3、 分组查询时,用于过滤掉不符合条件的组的子句是____HAVING____。
上机练习
1、 基于scott.emp表进行一下查询:
① 查询公司员工工资的最大值,最小值,平均值,总和
@import “code\4.3.1.sql”
② 查询各种job的员工工资的最大值,最小值,平均值,总和
@import “code\4.3.2.sql”
③ 查询各种job的员工人数(提示:对job进行分组)
@import “code\4.3.3.sql”
④ 查询员工最高工资和最低工资的差距(DIFFERENCE)
@import “code\4.3.4.sql”
⑤ 查询各个管理者手下员工的最低工资,其中最低工资不能低于800,没有管理者的员工不计算在内
@import “code\4.3.5.sql”
⑥ 查询所有部门的名字dname,所在位置loc,员工数量和工资平均值
@import “code\4.3.6.sql”
⑦ 查询公司的人数,以及在1980-1987年之间,每年雇用的人数,结果类似下面的格式
total | 1980 | 1981 | 1982 | 1987 |
---|---|---|---|---|
30 | 3 | 4 | 6 | 7 |
@import “code\4.3.7.sql”
面试笔试题
1、____GROUP BY____子句实现对一个结果集进行分组和汇总。
2、假定Emp表*有14行记录,有三条记录Comm字段为NULL,则Select count(*) from emp和Select count(Comm) from emp分别返回___14_和11____。
3、____AVG()____函数返回的是满足给定条件的平均值。
4、下面有关HAVING子句描述错误的是___B____。
A)HAVING子句必须与GROUPBY子句同时使用,不能单独使用。
B)使用HAVING子句的同时不能使用WHERE子句。
C)使用HAVING子句的同时可以使用WHERE子句。
D)使用HAVING子句的作用是限定分组的条件。
5、____COUNT____函数返回的是满足给定条件的记录数。
Excise 4.4
上机练习
1、 查询和scott相同部门的员工姓名ename和雇用日期hiredate;
@import “code\4.4.1.sql”
2、 查询工资比公司平均工资高的所有员工的员工号empno,姓名ename和工资sal;
@import “code\4.4.2.sql”
3、 查询和姓名中包含字母u的员工在相同部门的员工的员工号empno和姓名ename;
@import “code\4.4.3.sql”
4、 查询在部门的loc为NewYork的部门工作的员工的员工姓名ename,部门名称dname和岗位名称job;
@import “code\4.4.4.sql”
5、 查询管理者是king的员工姓名ename和工资sal。
@import “code\4.4.5.sql”
面试笔试题
1、 rowid,rownum的定义分别是什么?
rowid 是物理地址,用于定位 oracle 中具体数据的物理存储位置, 查询中不会发生变化
rownum 是根据 sql 查询出的结果给每行分配一个逻辑编号,sql 不同可能会导致 rownum 不同
Excise 5.1
理论练习
1、 在Oracle中,表示不等于的操作符有两种,分别是___<>
_、!=_____。
2、在Oracle中,连接操作符用____||___表示。
3、在Oracle中,集合操作符有四种,分别为___MINUS ____ 、____ INTERSECT ____、 ___ UNION ALL _______、 ___ UNION_____。
上机练习
1、 查询工资大于1600的员工姓名和工资;
select ename, sal from emp where sal>1600;
2、 选择工资不在4000到5000的员工的姓名和工资;
select ename,sal from emp where sal not between 4000 and 5000;
3、 选择雇用时间在1981-2-19到1981-12-3之间的员工姓名,JOB和雇用时间HIREDATE;
Select ename, job, hiredate
from emp where hiredate
between to_date('1981-2-19','YYYY-mm-dd')
and to_date('1981-12-3','YYYY-mm-dd');
4、 选择在20和30号部门工作的员工姓名和部门号;
select ename,deptno from emp where deptno in(20,30);
5、 选择在1987年雇用的员工的姓名和雇用时间;
Select ename,hiredate
from emp
where hiredate between to_date('1987-1-1','YYYY-mm-dd')
and to_date('1987-12-31','YYYY-mm-dd');
6、 选择公司中没有管理者的员工姓名及JOB;
select ename,job
from emp
where mgr is null;
7、 选择公司中有奖金的员工姓名,工资和奖金级别;
select ename,sal,comm
from emp
where comm is not null
and comm>0;
8、 连接表emp的全部列,各个列之间用逗号连接,列头显示成OUT_PUT(提示:使用连接符||)。
select EMPNO|| ',' || ENAME || ',' || JOB || ',' || MGR || ',' || HIREDATE || ',' || SAL || ',' || COMM || ',' || DEPTNO as "OUT_PUT" from emp;
面试笔试题
1、 Oracle中字符串用什么符号链接?
||
2、设字段变量"工作日期"为日期型,"工资"为数值型,则要表达"工龄大于30年,工资高于1500,且低于1800元"这命令,其表达式是___C____。
A)工龄>30.AND.工资>1500.AND.工资<1800
B)工龄>30.AND.工资>1500.OR.工资<1800
C)INT((DATE()-工作日期)/365)>30.AND.工资>1500.AND.工资
D)INT((DATE()-工作日期)/365)>30.AND.(工资>1500.OR.工资<1800)
3、oracle中的操作符包括哪些类型?
算术,逻辑,比较,集合,连接
Excise 5.2
理论练习
1、 SQL函数分为单行函数、____ 分析函数 ____ 、___聚合函数_____三种。
2、 常用的分析函数有____ row_number() ____ 、____ rank() ____ 、 ____ dense_rank() ____三种。
面试笔试题
1、 说说Oracle中经常使用到的函数。
字符串常用函数、处理数值类型的函数、格式转换函数、日期函数
2、获得当前系统时间的查询语句是___C____。
A)Sysdate B)Select Sysdate
C)Select Sysdate from dual D)以上都可以
Excise 6.1
理论练习
1、数据库用来控制共享资源并发访问的机制是____数据库并发控制____。
Excise 6.2
理论练习
1、 按照锁的粒度进行分类,锁分为____表级锁____、 ____行级锁____和数据库级锁。
2、 锁的粒度和系统开销成_____反___比例关系。
面试笔试题
1、 Oracle的锁有几种,定义分别是什么?
按照锁的粒度进行分类,锁分为表级锁和行级锁和数据库级锁。
2、关于For update 子句和For update of 字段说法正确是__C__。
A)没有区别
B)前者只锁定当前表中的相关行,而后者锁定所有相关表的行
C)前者锁定所有相关表中的行,而后者锁定当前表的相关行
D)以上说法均不正确
Excise 6.3
理论练习
1、 两个事务相互等待对方释放资源时,就会形成___死锁_____。
面试笔试题
1、 解释什么是死锁,如何解决Oracle中的死锁?
是指两个会话,每个会话都持有另外一个会话想要的资源,因争夺资源而造成的一种互相等待的现象,此时就会出现死锁,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。Oracle对于“死锁”采取的策略是回滚其中一个事务,让另外一个事务顺利进行。
2、Oracle中用来释放锁的语句有___A____。(选择2项)
A)Rollback B)Commit C)Drop Lock D)Unlock
Excise 6.4
理论练习
1、 Oracle表有哪几种类型?
1)堆表:heap table :数据存储时,行是无序的,对它的访问采用全表扫描。
2)分区表 表>2G
3)索引组织表(IOT)
4)簇表
5)临时表
6)压缩表
7)嵌套表
Excise 6.5
理论练习
1、 什么是表分区技术?
数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。
Excise 6.6
理论练习
1、 常用的分区方法有4中,分别为___范围分区__、 哈希分区、间隔分区、列表分区____。
2、 依据HASH函数执行操作的表分区技术为___哈希分区_____。
面试笔试题
1、Oracle分区是怎样优化数据库的?
Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。
1). 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
2). 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,可能比整个大表修复花的时间更少;
3). 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
4). 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
5). 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快
6). 分区对用户透明,最终用户感觉不到分区的存在。
Excise 6.7
理论练习
1、 有哪几种常用的分区维护操作?
添加分区、删除分区、截断分区、合并分区、拆分分区、接合分区、重命名分区
Excise 7.1
理论练习
1、 Oracle数据库对象又称为___模式对象_____对象。
2、数据库对象是逻辑结构的集合,最基本的数据库对象是____表和视图,其他常用的数据库对象包括约束__、___序列、__、函数、___存储过程___。
Excise 7.2
理论练习
1、 同义词有两种类型,其中,只能在模式内访问,且不能与当前模式对象同名的同义词称为____私有同义词____,可被所有的数据库用户访问的是 ___ 公有同义词_____。
2、 创建同义词的语法关键字是___synonym_____。
Excise 7.3
理论练习
1、 用来生成唯一、连续序号的对象是___序列_____。
2、 创建序列的语法关键字是____sequence____。
面试笔试题
1、在下列各选项中,关于序列的描述哪一项是不正确的___D___?
A)序列是Oracle提供的用于产生一系列唯一数字的数据库对象
B)序列并不占用实际的存储空间
C)使用序列时,需要用到序列的两个伪列NEXTVAL与CURRVAL。其中,NEXTVAL 将返回序列生成的下一个值,而CURRVAL返回序列的当前值
D)在任何时候都可以使用序列的伪列CURRVAL,以返回当前序列值
Excise 7.4
理论练习
1、 视图的本质是一个____select____语句,被编译后存储在数据字典里。
2、 创建视图所依据的表称为____视图____。
3、 视图的优点有哪些?
4、 创建视图的语法关键字是___create view_____。
5、 _____with check option______语句可以帮助检查更新视图数据时,是否符合视图查询事实的一些规范。
面试笔试题
1、 在视图上使用DML语句有哪些限制?
a)可以在简单视图中执行 DML操作
b)当视图定义中包含以下元素之一时不能使用delete:
i.组函数
ii.GROUP BY子句
iii.DISTINCT关键字
iv.ROWNUM 伪列 DUAL伪表
c)当视图定义中包含以下元素之一时不能使用update:
i.组函数
ii.GROUP BY子句
iii.DISTINCT关键字
iv.ROWNUM 伪列
v.列的定义为表达式
d)当视图定义中包含以下元素之一时不能使用insert:
i.组函数
ii.GROUP BY子句
iii.DISTINCT关键字
iv.ROWNUM 伪列
v.列的定义为表达式
vi. 中非空的列在视图定义中未包括
2、 怎样创建一个视图,视图的好处是什么,视图可以控制权限么?
创建:
create or replace view [viewname] as …
好处:
1.封装查询
2.灵活的控制安全性
控制权限:
可以
3、关于创建视图的正确的说法是___BC____。(选择2项)
A)只能基于基表创建视图
B)定义视图的查询不能包含Order By, Compute By 和 Into子句
C)不能将默认值、规则和触发器与视图相关联
D)在视图中修改列名会影响基表的列名
Excise 7.6
理论练习
1、 从索引的特性上进行划分,索引类型分为普通索引、反向索引、唯一索引____、全文索引、函数索引、位图索引。
2、 创建索引的语法关键字是___create index_____。
3、 _____唯一___索引确保在定义索引的列中没有重复值。
4、 在低基数的列上,以及经常使用聚合函数的操作上创建索引,通常选择创建____位图索引____。
面试笔试题
1、 怎样创建一个索引?索引使用的原则有哪些?有什么优点和缺点?
创建索引:create index
使用原则:
1. 最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整;
2. =和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式;
3. 尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录;
4. 索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);
5. 尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
优点:
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
- 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
- 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
- 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
- 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
- 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
Excise 8.1
理论练习
1、 过程语言与结构化查询语言结合而成的编程语言简称为____ PL/SQL ____ 。
2、 ____PL / SQL块____是构成PL/SQL程序的基本单元。
3、 PL/SQL块分为三部分,包括____ declare ______ 、 ____ begin _____、 ____ exception _____。
4、 在PL/SQL中,赋值操作符用______:表示,’||’表示连接操作符,单行注释用#表示,多行注释用_/* */_表示,标签用<< >>表示,’…’表示范围____操作符。
5、 判断:PL/SQL区分大小写。(错)
面试笔试题
1、PL/SQL块中不能直接使用的SQL命令是___A____。(选择1项)
A)SELECT B)INSERT C)UPDATE D)DROP
Excise 8.2
理论练习
1、 在PL/SQL当中,_____属性类型_____用于引用数据库列的数据类型,以及表示表中一行的记录类型的。
2、 属性类型有两种,其中,引用变量和数据库列的数据类型称为___ 列类型 _____ ,用____ %type ____ 表示;提供表示表中一行的记录类型称为____ 行类型 ____ ,用_____ %row type ___表示。
3、 使用属性类型的优点有哪些?
不需要知道被引用的表列的具体类型
如果被引用对象的数据类型发生改变, PL/SQL 变量的数据类型也随之改变
面试笔试题
1、声明%TPYE类型的变量时,服务器将会做什么操作____ A ___?
A)为该变量检索数据库列的数据类型 B)复制一个变量
C)检索数据库中的数据 D)为该变量检索列的数据类型和值
2、定义SQL块%TYPE有什么好处
使得 PL/SQL 更加灵活,更加适应于对数据库定义的更新
3、在PL/SQL块中定义一个名为PI值为3.14的Real型常量的语法是____D___。
A)Pi Const Real=3.14; B)Pi Real Const =3.14;
C)Constant Pi Real:=3.14 D)Pi Constant Real:=3.14
Excise 8.3
理论练习
1、 PL/SQL支持的流程控制结构包括___顺序控制_____、 ____ 条件控制 ____ 、____循环控制____三种。
2、 在PL/SQL语言当中,条件控制包括___if ____ 和 ____ case ____ 两种语句;循环控制包括 ___ loop _____ 、 ____ for ____ 、___ while _____ 三种循环结构。
3、 跳转结构语句包括____ goto ____ 、 ____ null ____ 两种,其中,____ goto ____语句实现无条件转到标签指定的语句, ___ null ____语句是什么也不做的空语句。
面试笔试题
1、举例说明while…loop/for…loop循环语句,如插入1…10的值到一个单字段数据表(结构自定义)。
i:=1;
while i<=10 loop
insert into test(id) values(i);
i:=i+1;
end loop;
commit;
2、判断下面不完整的 loop语句:
LOOP
INSERT INTO inventory (id_number, description)
VALUES (v_id_number, v_description);
v_counter := v_counter +1;
________END LOOP_________命令应被加入,为了有条件的停止 loop 执行?
3、有一段PL/SQL程序如下所示:
var1 := 10;
LOOP
EXIT WHEN var1 > 12;
var1 := var1 +1;
DBMS_OUTPUT.PUT_LINE(‘A’);
END LOOP;
输出为________AAA______________。
Excise 8.4
理论练习
1、 在PL/SQL中,运行程序时出现的错误称为___异常_____。
2、 PL/SQL的异常有两种类型,其中,当程序违反Oracle规则或者超越系统限制时隐式引发的异常称为____预定义异常______;用户在声明部分定义的异常称为 _____ 用户定义异常 _____ ,该异常可以通过 ____ RAISE____语句显式引发。
3、 表示“除数为0错误”的系统异常的关键字为 ___ ZERO_DIVIDE_____ ,表示“查询多行错误”的系统异常的关键字为 ___ No_rows_found _____ ,表示“非法数字”的系统异常关键字为___Invalid_Number _____ ,表示“未查到数据”的异常关键字为___ No_Data_rows_found _____。
面试笔试题
1、当Select语句没有返回行时,将引发下列哪个异常___A____?
A)No_rows_found B)No_data_found C)No_Data_rows_found D)Invalid_Number
2、以零作除数时会引发___B____异常。
A)VALUE_ERROR B)ZERO_DIVIDE C)STORAGE_ERROR D)SELF_IS_NUL
Excise 8.5
理论练习
1、 PL/SQL语言的优点有哪些?
1、SQL 的支持
2、面向对象的支持
3、良好的性能
4、高效性
5、可移植性
6、与SQL 紧密结合
7、高度安全
面试笔试题
1、 下面哪个操作会导致用户连接到Oracle数据库,但不能创建表( A )。
A 授予了CONNECT的角色,但没有授予RESOURCE的角色
B 没有授予用户系统管理员的角色
C 数据库实例没有启动
D 数据库监听没有启动
Excise 9.1
理论练习
1、PL/SQL用____游标____来管理SQL的SELECT语句。
2、什么是游标?
L/SQL 是用游标来管理 SQL 的 SELECT 语句的 . 游标是为了处理这些语句而分配的一大块内存 . 它提供了对一个结果集进行逐行处理的能力 , 可看作是一种特殊的指针 . 它与某个查询结果集相关联 , 可以指向结果集的任意位置 , 以便对指定位置的数据进行处理 . 使用它可以在查询数据的同时对数据进行处理
3、游标与某个查询结果集相关联,可以指向结果集的任意位置,可以看作是一种特殊的____ 指针 ____。
4、游标的类型分为___ 隐式游标 ____ 、 ____ 显式游标 ____ 、 __ REF 游标 _______三种。
面试笔试题
1、如何使用Oracle的游标?
声明游标
打开游标(将数据存储到游标)
根据游标提取数据
关闭游标
2、在定义游标时使用的FOR UPDATE子句的作用是____C___。
A)执行游标 B)执行SQL语句的UPDATE语句
C)对要更新表的列进行加锁 D)都不对
Excise 9.2
理论练习
1、 自动声明、打开和关闭的游标称为___ 隐式游标 _____。
2、 什么情况下自动创建隐式游标?
使用 DML 语句(增删改)和单行查询语句(赋值)时
3、 隐式游标的属性有哪些?
%FOUND – SQL 语句影响了一行或多行时为 TRUE
%NOTFOUND – SQL 语句没有影响任何行时为 TRUE
%ROWCOUNT – SQL 语句影响的行数,没有影响任何行,返回 0 ,在执行任何 DML 语句前,值为 NULL
%ISOPEN - 游标是否打开,隐式游标始终为 FALSE( 隐式游标执行时打开,结束时立即关闭 )
Excise 9.3
理论练习
1、 由PL/SQL程序员定义和命名的游标称为___ 显式游标 _____。
2、 需要手动打开,手动关闭的游标是____ 显式游标____。
3、 当用户需要从游标中提取多行记录时,经常使用的游标是____ 显式游标____。
面试笔试题
1、 简述使用带参数显式游标的四个步骤。
声明游标、打开游标、提取游标指向数据给变量、关闭游标
–>
2、 作家信息表Auths包含两个字段
Author_Code | VARCHAR2(50) |
---|---|
Salary | NUMBER(10) |
其中Author_Code为作家代码,主键。Salary为作家工资额,非空。
现由于工资调整,对于作家代码在‘A00001′和‘A00006′;之间的作家工资少于或等于五百,则给该作家增加15%的工资,对于大于500到1000之间则增加12%,其它则增加10%。如下程序是通过游标方式实现的,请填写程序中相应的空格。
DECLARE
– 声明两个变量,用来接收游标返回的工资和作家代码
v_Salary __ NUMBER(10) ______
v_Code ___ VARCHAR2(50)_____
v_ErrText __ VARHCAR(200) __ ;
– 声明游标 c_Salary ,该游标的结果集是 Auths 表中作家代码 (Author_Code) 值是
– ‘A00001′ 到 ‘A00006′ 的工资值 (Salary ) 和作家代码值 (Author_Code)
CURSOR c_Salary IS
SELECT Salary,
Author_Code
FROM Auths
WHERE Author_Code >=’A00001′
AND Author_Code <=’A00006′;
BEGIN
– 打开游标
open __ c_Salary ; _____
LOOP
– 游标循环,将游标查询结果集中的一行保存到两个临时变量中
select c_Salary INTO v_Salary, v_Code ___;
– 当结果集中没有行是退出
EXIT WHEN ___ NO_DATA_FOUND _____ ;
– 如果该作家的工作少于或等于五百,则给该作家增加 15% 的工资
– 500 到 1000 之间则增加 12%, 其他增加 10%
IF v_Salary <= 500 THEN
UPDATE Auths
SET Salary = _ Salary+Salary*0.15 _______
WHERE Author_Code = v_Code;
ELSIF v_Salary <= 1000 THEN
UPDATE Auths
SET Salary = Salary + Salary * 0.12
WHERE Author_Code = v_Code;
___ THEN UPDATE Auths
SET Salary = Salary + Salary * 0.1
WHERE Author_Code = v_Code;
END IF;
END LOOP;
_ CLOSE _c_Salary_;
________;
EXCEPTION
WHEN OTHERS THEN
CLOSE c_Salary;
ROLLBACK;
v_E rrText := ________;
DBMS_OUTPUT.PUT_LINE(‘ 程序异常终止,出现一下错误 :’||v_ErrText);
END;
Excise 9.5
理论练习
1、 游标变量的优点和限制有哪些?
游标变量的优点有:
可从不同的 SELECT 语句中提取结果集
可以作为过程的参数进行传递
可以引用游标的所有属性
可以进行赋值运算
使用游标变量的限制:
不能在程序包中声明游标变量
FOR UPDATE 子句不能与游标变量一起使用
不能使用比较运算符
Excise 10.1
理论练习
1、____存储过程是一组为了完成为了完成特定功能的SQL语句集 _的符合数据库程序脚本规范的程序,经过编译后存储在数据库_中,然后由一个应用程序或者其他PL/SQL程序执行_____。
2、从根本上讲,过程就是___存储在数据库中的____的PL/SQL程序块。
3、创建过程的语法关键字是____create procedure_____。
4、创建带有输出参数的过程,参数前面要加参数类型为____out____。
面试笔试题
1、 谈谈存储过程的优缺点。
优点:
1.执行速度比普通sql快。
2.减少网络传输
3.可维护性更好
4.安全性更强
5.可扩展性更强
缺点:
1.面对复杂的业务逻辑,过程化的处理会很吃力
2.开发调试复杂
3.无法应用缓存。
4.不支持群集
2、下面哪些关于存储过程的描述是正确的___ABD____?(选择3项)
A)存储过程是一组预编译的SQL语句 B)存储过程可加快查询的执行速度
C)不可以在存储过程内引用临时表 D)帮助实现模块化、编程
3、PL/SQL过程的参数模式有____ABC___。(选择3项)
A)In B)Out C)In Out D)Ref
4、存储过程中的传出参数使用____out/inout____关键字。
Excise 10.2
理论练习
1、 有返回值的,命名的PL/SQL子程序称为____函数____。
2、 定义函数的限制有哪些?
3、 访问函数有哪两种方式,对应的语法是怎样的?
plsql语句调用 fun()
dual调用:用dual伪表进行显示,select 函数名(参数) from dual;
4、 创建函数的语法关键字是____create function_____。
面试笔试题
1、Oracle中function和procedure,以
及游标的区别?
1). 可以理解函数是存储过程的一种
2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值
3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程
4). 在sql数据操纵语句中只能调用函数而不能调用存储过程
Excise 10.3
理论练习
1、 将相关的过程、函数、变量、游标和异常等对象进行封装,得到___程序包_____。
2、 程序包由_____ 包元素 ___ 和____ 包体 ___ 两部分组成,其中,在 ___ 包元素 _____ 中声明程序包中的公共对象,在___ 包体 ____中声明程序包中的私有对象,以及实现在包规范中声明的子程序和游标。
3、 创建程序包的语法关键字是___create package_____。
4、 判断:语句:drop package package_name;,删除的是程序包的主体。(对)
5、 程序包的优点有哪些?
简化应用设计、提高应用性能、实现信息隐藏、子程序重载。
Excise 11.1
理论练习
1 、特定事件出现时,自动执行的存储过程称为 __ 触发器 ______ 。
2 、判断:触发器可以自动触发,也可以被显式调用。( 错 )
3 、判断:触发触发器的特定事件可以是执行查询的 DML 语句。( 对 )
4 、触发器由 ___ 触发事件 _____ 、 ____ 触发条件 ____ 、 __ 触发操作 ______ 三部分组成。
5 、按触发事件的不同,触发器分为 ___DML触发器 _____ 、 ___ INSTEAD OF 触发器 _____ 、 ___ 系统触发器 _____ 三大类。
面试笔试题
1、能够自动执行操作的存储对象是: ___ 触发器 ___ 。
Excise 11.2
理论练习
1、 DML触发器分为____ 行级触发器 ____和 ____ 语句级触发器 ____两类。
面试笔试题
1、 怎样创建一个触发器?触发器的定义是怎样的?触发器的游标怎样定义?
创建触发器:
CREATE TRIGGER trigger_name {INSERT | DELETE | UPDATE} ON table_name
PL/SQL_BLOCK | CALL procedure_name;
触发器的定义:
当某个事件发生时自动地隐式运行
定义触发器的游标:
ALTER TRIGGER [dbo].[deleteClassSetTrigger] --新建触发器
ON [dbo].[t_d_ExercitationClassSet] --在某个表中新建的触发器
for delete --做的什么操作触发触发器
AS
BEGIN
declare @id int --定义变量id
declare cur_delete cursor --定义游标
for
select ExercitationClassSetId from deleted --从删除的数据中找到某个字段值
open cur_delete --打开游标
fetch next from cur_delete into @id
while @@fetch_status=0
begin
delete t_d_ExercitationClass where ExercitationClassSetId=@id --执行符合条件的SQL语句
fetch next from cur_delete into @id --查找下一条数据
end
close cur_delete --关闭游标
deallocate cur_delete --删除游标引用
end
Excise 11.3
理论练习
1 、INSTEAD OF 触发器是定义在 __ 视图 ______ 上的触发器,该触发器只能是 ____ 行级 ____ (行级 or 语句级)触发器,定义该触发器必须加上 ____ FOR EACH ROW ______ 语句。
2、 INSTEAD OF 触发器不能包含 ___ WHEN _____ 子句,不能包含 __ BEFORE ______ 和 ____ AFTER ____ 选项。
Excise 11.4
理论练习
1、 被Oracle系统事件自动触发的触发器称为____系统触发器 _____。
2、 执行哪些操作可以触发系统触发器?
启动和关闭触发器
用户登录和退出
DDL操作
综合设计题
主观题 (100.0)
1、在某软件公司里,要建立一个数据库来管理员工和项目,其中职员的信息包括(员工编号、姓名、性别、生日、祖籍、工资),要求员工编号不能重复,姓名必须填写,性别如果不做特别说明默认为男,而且不能填写除‘男’或‘女’之外的其它任何字;工资必须大与0;项目的信息包括(项目编号、项目名称、起始日期、结束日期、预算),要求项目编号从1001号起每个项目递增1,项目名称不能重复且不可空着。注意:职员是要做项目的!!
要求:
- 在sqlplus环境中使用system用户登录到服务器
C:\Users\62531>sqlplus sys/1@orcl as sysdba;
SQL*Plus: Release 11.2.0.2.0 Production on 星期四 12月 24 16:34:16 2020
Copyright (c) 1982, 2014, Oracle. All rights reserved.
连接到:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
-
使用自己名字的缩写创建一个数据库用户(如张三丰:zhangsf第一个字全拼,其它字只写第一个字母)
-
授予用户create table 、create session 权限和resource 角色
-
在PL/SQL Developer 中使用创建的用户登录并打开一个SQL窗口
-
创建用户及表,并创建相应的约束
SQL> create user xvbn identified by 1;
User created
SQL> grant create table,create session to xvbn;
Grant succeeded
SQL> grant resource to xvbn;
Grant succeeded
的信息包括(员工编号、姓名、性别、生日、祖籍、工资),要求员工编号不能重复,姓名必须填写,性别如果不做特别说明默认为男,而且不能填写除‘男’或‘女’之外的其它任何字;工资必须大与0;项目的信息包括(项目编号、项目名称、起始日期、结束日期、预算),要求项目编号从1001号起每个项目递增1,项目名称不能重
create table clerk(
cno number unique,
cname varchar2(10) not null,
csex varchar2(2) default '男' check(csex in ('男','女')),
cbir date,
chome varchar(10),
csalary check(csalary>0)
);
create seqeunce PNO_SEQ
start with 1
increment by 1;
create table project(
no varchar2,
cname,
csex,
cbir,
chome,
csalary
);
create or replace trigger "TRIG_SEQ_PNO" before insert on project
for each row
when (new."pno" is null)
begin
:new.pno := PNO_SEQ.nextval;
end;
create table cp(
cno number;
pno number;
);
- 使用语句插入以下员工信息和项目信息
EMPNO | ENAME | ESEX | BIRTHDAY | ADDRESS | SALARY |
---|---|---|---|---|---|
1 | 王晓明 | 女 | 1980/1/3 | 山东青岛 | 8900 |
2 | 王涵 | 男 | 1978/6/12 | 广东佛山 | 760 |
3 | 李有才 | 男 | 1978/5/23 | 上海 | 7800 |
4 | 张小小 | 女 | 1982/9/7 | 山东济南 | 4500 |
insert into clerk values(1,'王晓明','女',1980/1/3,'山东青岛',8900)
insert into clerk values(2,'王涵 ' ,'男',1978/6/12,'广东佛山',760)
insert into clerk values(3,'李有才','男',1978/5/23,'上海' ,7800)
insert into clerk values(4,'张小小','女',1982/9/7,'山东济南',4500)
ITEMID | ITEMNAME | STARTDATE | ENDDATE | MONEY |
---|---|---|---|---|
1001 | 小型监控系统 | 2009/8/6 | 2010/1/1 | 100000 |
1002 | 办公网络安全 | 2009/12/30 | 2010/10/1 | 450000 |
1003 | 电子购物广场 | 2009/11/30 | 2010/12/31 | 12000 |
insert into project values(1001,'小型监控系统',2009/8/6,2010/1/1,100000);
insert into project values(1002,'办公网络安全',2009/12/30,2010/10/1,450000);
insert into project values(1003,'电子购物广场',2009/11/30,2010/12/31,12000);
9.员工参与项目的信息如下:王晓明三个项目都参加了,王涵参与了电子购物广场和办公室安全项目,李有才参与了小型监控系统和办公网络安全项目,张小小只参与了小型监控系统一个项目
EMPNO | ITEMID |
---|---|
1 | 1001 |
1 | 1002 |
1 | 1003 |
2 | 1002 |
2 | 1003 |
3 | 1001 |
3 | 1002 |
4 | 1001 |
insert into values cp(1,1001);
insert into values cp(1,1002);
insert into values cp(1,1003);
insert into values cp(2,1002);
insert into values cp(2,1003);
insert into values cp(3,1001);
insert into values cp(3,1002);
insert into values cp(4,1001);
2、一个简单图书管理系统包括图书馆内书籍信息、学校在校学生信息以及学生借阅信息此系统功能。分为以下三张表:|
1.图书信息表
字段名称 | 数据类型 | 是否可为空 |
---|---|---|
图书编号(PK) | varchar2(10) | 否 |
书名 | varchar2(50) | 否 |
作者 | varchar2(12) | 否 |
出版社 | varchar2(50) | 是 |
出版日期 | date | 是 |
介绍 | varchar2(200) | 是 |
2.读者信息表
字段名称 | 数据类型 | 是否可为空 |
---|---|---|
读者学号(PK) | number | 否 |
读者姓名 | varchar2(10) | 否 |
读者性别(男/女) | varchar2(2) | 否 |
所在系 | varchar2(12) | 否 |
生效时间 | date | 是 |
失效时间 | date | 是 |
累计借书 | number | 是 |
3.借阅表
字段名称 | 数据类型 | 是否可为空 |
---|---|---|
图书编号 | varchar2(10) | 否 |
读者学号 | number | 否 |
借书日期 | date | 否 |
还书日期 | date | 否 |
题目:(假设表已经创建,数据已经添加)
- 查询没有借过书的学生有哪些
select distinct 读者姓名 from 读者信息表 join 借阅表 on 借阅表.读者学号=读者信息表.读者学号 where 借书日期 is null;
- 将计算机专业的读者借书的还书日期再加30天
update 借阅表 set 还书日期=还书日期+30 where 所在系='计算机';
- 查询借书最多的读者有哪些
select 读者姓名
from 读者学号,读者信息表 join 借阅表
on 借阅表.读者学号=读者信息表.读者学号
group by 读者学号 count(图书编号)=max(count(图书编号) );