一、 填空题
1.Oracle数据库系统的物理存储结构主要有三类文件组成,分别:数据文件和日志文件和控制文件。逻辑存储结构包括oracle 数据块、区、段 和 表空间。
2.SQL*Plus中直接调用过程的关键字是exec;查询中去掉重复的行,必须使用的关键字是distinct;关键字describe可以用来显示表的结构信息。
3.使用EXPORT命令时,可以有3种不同方式导出数据,表方式就是导出一个指定的基本表,包括表的定义和数据及表上的索引、约束等。用户方式是导出一个用户的所有对象,包括表、视图、存储过程、序列等。全数据库方式是导出数据库中所有的对象。
4.在ORACLE数据库中,将权限分为两类即系统权限和对象权限,分别指在系统级控制数据库的存取和使用机制和在模式对象上控制存取和使用的机制。
1、启动Oracle数据库应该用__STARTUP_命令。
2、使用ORACLE的__DBCA__组件可以创建一个新的数据库。
3、Oracle 安装过程中SID指的是__系统标示号__。
4、下列哪一项是ORACLE数据库中最小的逻辑存储分配单元?_盘区_
5、删除表中数据的使用_DELETE_命令
6、如果创建表的主键是可以自动编号,则应该为主键设置什么类型的索引?__反向键索引__
7、当数据库运行在归档模式下时,哪个进程负责系统日志的归档?__ARCH__
8、在使用创建行级触发器时,通过使用关键字__NEW_可以引用插入更新的数据。
9、为了去除结果集中重复的行,可在SELECT语句中使用下面哪个关键字?__DISTINCT__
10、下面哪一个函数可以把一个列中的所有值累加求和?__SUM__
11、在Oracle中,关于触发器的描述正确的是。__触发器是特殊的存储过程__
12、下列哪个对象属于模式对象?(表)
13、为了减少表中的链接记录和迁移记录,应该增大表中哪一个存储参数?(PCTFREE)
14、如果只需要返回匹配的列,则应当使用哪种连接?(内连接)
15、在下列模式对象中,哪个对象不会占用实际的存储空间? (视图)
16、使用__desc__命令可以显示表结构。
17、在ORACLE的逻辑存储结构中,根据存储数据的类型,可以将段分为__数据段__、索引段、__临时段__、LOB段和回退段。
18、在Oracle系统中,一个模式只能被一个__数据库对象__所拥有,其创建的所有模式对象都保存在自己的模式中。
19、集合运算符__union__实现了集合的并运算。
20、PL/SQL程序块主要包含3个部分:声明部分、__可执行部分__和__异常处理部分__。
21、在众多事务控制语句中,用来撤销事务操作的语句为__rollback__ 。
22、使用__shutdown__命令可以关闭Oracle数据库。
23、__角色__是具有名称的一组相关权限的组合。
24、在Oracle 系统中,为了实现对表、视图和索引等数据库对象进行管理,Oracle 采用__模式__实现。
25、一个模式只能够被一个数据库用户所拥有,其创建的所有模式对象都保存在自己的模式中。
26、Char 数据类型与Varchar2 类型都用于存储字符串。如果定义了Char 类型的字段,并且向其赋值时,字符串的长度小于定义的长度,则使用空格填充;而Varchar2 类型的字段用于存储变长的字符串,即如果向该列赋值的字符长度小于定义时的长度,该列的字符长度只会是实际字符数据的长度,系统不会使用空格填充。
27、ROWID 实际上保存的是记录的物理地址,因此通过ROWID 来访问记录右以获得最快的访问速度。
28、在STORAGE 子句中可以设置6 个存储参数。其中,Initial 指定为表中的数据分配的第一个盘区的大小;Next 指定为存储表中的数据分配的第二个盘区大小;Pctincrease 指定从第二个盘区之后,每个盘区相对于上一个盘区的增长百分比;Minextents 指定允许为表中的数据所分配的最小盘区数目;Maxextents 指定允许为表中的数据所分配的最大盘区数目。
6.通过数据块空间管理参数可以控制数据块中空闲空间的使用方法,其中Pctfree 用于控制数据块的更新预留的空间,而Pctused 用于控制数据块在删除时释放空间的门槛。
29、为Student 表手动分配存储空间,并且大小由NEXT 参数设置,则应使用的语句为Alter table Student allocate extent; ;如果为Student 表手动分配了一个大小为128KB 的新盘区,则应使用的语句为Alter table Student allocate extent(size 128k); 。
30、填写下面语句,使其可以将Class 表移动到表空间SYSTEM 中的数据段,并且其初始化盘区为30KB,第二个盘区为20KB,随后分配的盘区不会增长。
ALTER TABLE Class move
TABLESPACE SYSTEM
STORAGE (
Initial 30k
Next 20k
Pctincrease 0
MAXEXTENTS UNLIMITED);
31、根据约束的作用域,约束可以分为表级约束和列级约束两种。列级约束是字段定义的一部分,只能够应用在一个列上;而表级约束的定义独立于列的定义,它可以应用于一个表中的多个列。
32、填写下面的语句,使其可以为Class 表的ID 列添加一个名为PK_CLASS_ID 的主键约束。 ALTER TABLE Class Add constraint PK_CLASS_ID PRIMARY KEY(ID)
33、假设已经创建了CHAINED_ROWS 表,填写下面的语句,以便对“业务员信息”表进行链接记录分析: ANALYZE TABLE 业务员信息 List chained rows into chained_rows
34、下列哪个对象属于模式对象?(表)
35、关于模式的描述下列哪一项不正确?(一个表可以属于多个模式)
36、如果一个表中某条记录的一个字段暂时不具有任何值,那么在其中将保存什么内容?(NULL)
37、下列哪一项不是伪列ROWID 的作用?(保存记录的头信息)
38、下列哪一项错误地描述了默认值的作用? (如果向表中添加记录并且为定义默认值的列提供值,则该列仍然使用定义的默认值)
39、某用户需要创建一个很小的表,但是该表会被许多查询使用,这时用户应当在创建该表时指定下列哪个子句?(CACHE)
40、为了减少表中的链接记录和迁移记录,应当增大表的哪一个存储参数? (PCTFREE)
41、唯一约束与主键约束的一个区别是?(唯一约束的列可以为空值)
42、如果为表Employee 添加一个字段Email,现在规定每个雇员都必须具有唯一的Email 地址,则应当为Email 字段建立哪种约束?(UNIQUE)
43、B 树索引可以是唯一的或者不唯一的,唯一的B 树索引可以保证索引列上不会有重复的值。
44、在为表中某个列定义PRIMART KEY 约束PK_ID 后,则系统默认创建的索引名为PK_ID。
45、在B 树索引中,通过在索引中保存排过序的索引列的值与相对应的RowID 来实现快速查找。
46、如果表中某列的基数比较低,则应该在该列上创建位图索引。
47、如果要获知索引的使用情况,可以通过查询V$OBJECT_USAGE 视图;而要获知索引的当前状态,可以查询Index_Stats 视图。
48、查看下面的语句创建了哪一种索引?(复合索引)
CREATE INDEX test_index ON student(stuno,sname)
TABLESPACE users STORAGE(INITIAL 64k,next 32k);
49、使用ALTER INDEX...REBUILD 语句不可以执行下面的哪个任务? (将一个索引分区移动到另一个表空间)
50、下列关于约束与索引的说法中,哪一项是不正确的? D D.定义FOREIGN KEY 约束时会创建一个B 树唯一索引
51、假设EMPLOYEE 表包含一个MARRIAGE 列,用于描述职工的婚姻状况,则应该在该字
段上创建什么类型的索引? (位图索引)
52、下列关于索引的描述哪一项是不正确的? B B.在为表创建索引后,所有的查询操作都会使用索引
53、如果经常执行类似于下面的查询语句: SELECT * from student where Substr(sname,0,2)='刘' 应当为student 表中的sname 列创建哪一种类型的索引?(基于函数的索引)
54、假设在一个表的3 个字段NAME、SEX 和MONTH_OF_BIRTH 中分别保存姓名、性别和 出生的月份数据,则应当为这3 个字段分别创建何种类型的索引? (分别创建B 树索引、位图索引和基于函数的索引)
55、如果创建的表其主键可以自动编号,则应该为主键创建的索引是哪种类型?(反向键索引)
56、在不为视图指定列名的情况下,视图列的名称将使用表列的名称。
57、视图与数据库中的表非常相似,用户也可以在视图进行INSERT、UPDATE、和DELETE 操作。通过视图修改数据时,实际上是在修改基本表中的数据;相应地,改变基本表中的数据也会反映到该表产生的视图中。
58、视图是否可以更新,这取决于定义视图的SELECT 语句,通常情况下,该语句越复杂,创建的视图可以更新的可能性也就越小。
59、下面的语句创建了一个序列对象,该序列对象的开始数为2,每次递增2,当大于1000 后,序列值重新返回到2.在空白处填写适当的代码,完成上述要求。 Create sequence seg_test Start with 2 Increment by 2 Maxvalue 1000 Cycle;
60、如果允许用户对视图进行更新和插入操作,但是又要防止用户将不符合视图约束条件的记录添加到视图,应当在定义视图时指定下列哪一个子句?(WITH CHECK OPTION)
61、在下列模式对象中,哪个对象不会占用实际的存储空间?(视图)
62、如果想查看视图中哪些字段是可以更新的,应当查询哪一个数据字典视图?(DBA_UPDATABLE_COLUMNS)
63、在下列各选项中,关于序列的描述哪一项是不正确的? D D.在任何时候都可以使用序列的伪列CURRVAL,以返回当前序列值
64、在下列各选项中,关于同义词的描述哪一项是不正确的? B B.在创建同义词时,所替代的模式对象必须存在
65、Oracle 数据库系统的物理存储结构主要由3 类文件组成,分别为 数据文件、日志文件 、 控制文件 。
66、用户对数据库的操作如果产生日志信息、则该日志信息首先被存储在 日志缓冲区 中,随后
由 LGWR 进程保存到__ 日志文件__ 。
67、一个表空间物理上对应一个或多个 _数据__ 文件。
68、在Oracle 的逻辑存储结构中,根据存储数据的类型,可以将段分数据段、索引段、回退段、 LOB段和 临时段 。
69、在Oracle 的逻辑存储结构中, 数据块 是最小的I/O 单元。
70、在多进程Oracle 实例系统中,进程分为 用户进程 、 后台进程 和 服务器进程 。当一个用户运行应用程序,如PRO*C 程序或一个Oracle 工具(如SQL*Plus),系统将为用户运行的应用程序建立一个 用户进程 。
71、下列选项中,哪一部分不是Oracle 实例的组成部分?(控制文件)
72、在全局存储区SGA 中,哪部分内存区域是循环使用的?(日志缓冲区)
73、解析后的SQL 语句在SGA 的哪个区域中进行缓存?(共享池)
74、如果一个服务进程非正常终止,Oracle 系统将使用下列哪一个进程来释放它所占用的资源?(PMON)
75、如果服务器进程无法在数据缓冲区中找到空闲缓存块,以添加从数据文件中读取的数据块,则将启动如下哪一个进程?(DBWR)
76、下列关于共享服务器模式的叙述哪一项不正确? A A.在共享服务器操作模式下,每一个用户进程必须对应一个服务器进程
77、当数据库运行在归档模式下时,如果发生日志切换,为了保证不覆盖旧的日志信息,系统,将启动如下哪一个进程?(ARCH)
78、下列哪一个进程和数据库部件可以保证用户对数据库所做的修改在没有保存的情况下,不会发生丢失修改数据? (CKPT 和控制文件)
79、下列哪一个进程用于将修改过的数据从内存保存到磁盘数据文件中? (DBWR)
80、如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图?(DBA 视图)
81、下列哪一项是Oracle 数据库中最小的存储分配单元?(数据块)
82、下面的各项中哪一个正确描述了Oracle 数据库的逻辑存储结构?(表空间由段组成,段由盘区组成,盘区由数据块组成)
二、 判断题
1.INSERT事件触发器中可以使用:old伪记录;DELETE事件触发器中可以使用:new伪记录。 (×)
2.后台进程LGWR的作用是数据库写入程序。 (×)
3.Alter user tempuserIdentified by oracle Default tablespace users Default temporary tablsespace temp Quota 100M on users (×)
4.SQL*PLUS中,显示登录的用户的命令是DESCRIB user。 (×)
5.默认登录Oracle Enterprise Manager Database Control 的端口号是1158。(√)
1.存储空间分配的基本单元是数据块 。 (√ )
2.一个表空间可以对应多个物理文件//数据文件 ( × )
3.后台进程LGWR的作用是将数据库写入程序。 ( × )
4.Intersect命令主要是实现两个集合的交运算。 ( √ )
5.锁的粒度与数据库系的并发度和并发控制的开销密切有关。锁的粒度越大,数据库中所能使用的资源越多。 ( × )
三、 选择题
1.有4条与游标有关的语句,它们在程序中出现的正确顺序是:(B) B.2、1、3、4
1) OPEN abc
2) CURSOR abc IS SELECT ename FROM emp
3) FETCH abc INTO vname
4) CLOSE abc
2.数据库运行在归档模式下,如果发生日志切换,为了保证不覆盖旧的日志信息,系统将启动如下哪个进程?(D) D.ARCH
3.对于ROLLBACK命令,以下准确的说法是:(C) C.撤销到上次执行提交或回退操作的点
4.创建表空间时,可以指定表空间中存储对象的默认存储参数,其中哪个参数用于设置分配给每一个对象的初始区大小(B) B.INITIAL
5.现将CONNECT 角色授予TEXT_ROLE角色,下面哪个语句可以实现(D) D.GRANT CONNECT TO TEST_ROLE;
1、启动Oracle数据库应该用_____D_____命令。 D.STARTUP
2、使用ORACLE的_____B_____组件可以创建一个新的数据库。 B.DCBA
3、Oracle 安装过程中SID指的是_____A__。 A.系统标示号
4、下列哪一项是ORACLE数据库中最小的逻辑存储分配单元?____ C___ C.盘区
5、删除表中数据的使用____A___命令 A.DELETE
6、如果创建表的主键是可以自动编号,则应该为主键设置什么类型的索引?____A______ A.反向键索引
7、当数据库运行在归档模式下时,哪个进程负责系统日志的归档?___ D_______ D.ARCH
8、在使用创建行级触发器时,通过使用关键字__ D___可以引用插入更新的数据。 D.NEW
9、为了去除结果集中重复的行,可在SELECT语句中使用下面哪个关键字?_ B________ B.DISTINCT
10、下面哪一个函数可以把一个列中的所有值累加求和?__B_______ B.SUM
11、在Oracle中,关于触发器的描述正确的是。____D_____ D.触发器是特殊的存储过程
12、下列哪个对象属于模式对象?_____ C__
13、为了减少表中的链接记录和迁移记录,应该增大表中哪一个存储参数?_____A__
14、如果只需要返回匹配的列,则应当使用哪种连接?____A___ C.表
15、在下列模式对象中,哪个对象不会占用实际的存储空间? _______A___ A.视图
四、 简答题
1.How to connect remote oracle server by SQL*PLUS? Please write down the steps and the operating statements?
如何使用SQL*PLUS连接远程oracle服务器?请写下操作步骤和操作说明?
方法一:
1).在开始菜单在,找到SQL PLUS.双击SQL PLUS
2).在弹出的SQL PLUS,输入数据库实例的用户名何密码,按enter键
3). 如果oracle服务器中装有多个数据库实例,则在用户名处输入:用户名/密码@数据库名称。如果数据库服务器不在本机上,还需要加上数据库服务器的地址:用户名/密码@IP地址/数据库名称。
方法二:
在开始-运行,输入cmd。弹出的黑色框中输入:sqlplus 用户名/密码@IP地址/数据库名称。
2.What is the difference between procedures and functions in the Oracle database?
Oracle数据库中的过程和函数有什么不同?
1). 函数必须有返回值,存储过程可以没有返回值
2). 函数可以单独执行,存储过程必须通过execute执行
3). 函数可以嵌入SQL中执行,而存储过程不行
3.读懂如下程序:
CREATE OR REPLACE FUNCTION ret_deptinfo(
p_deptno dept.deptno%TYPE, p_num OUT NUMBER, p_max OUT NUMBER)
RETURN dept.dname%TYPE
AS
v_dname dept.dname%TYPE;
BEGIN
SELECT dname INTO v_dname FROM dept WHERE deptno=p_deptno;
SELECT count(*),max(sal) INTO p_num,p_max FROM emp WHERE deptno=p_deptno;
RETURN v_dname;
END ret_deptinfo;
分析程序实现的功能:
定义一个函数,以部门号位参数,返回dept表该部门的人数和最高工资。
4.输入和运行以下程序:
CREATE OR REPLACE TRIGGER CHECK_SAL
BEFORE UPDATE ON emp
FOR EACH ROW
BEGIN
IF :new.job='CLERK' AND (:new.sal<500 OR :new.sal>1000) THEN
RAISE_APPLICATION_ERROR(-20001, '工资修改超出范围,操作取消!');
END IF;
END;
分析程序实现的功能:
为emp表创建一个触发器,当更新员工工资时,如果新员工的工作是CLERK
并且新员工工资小于500或大于1000时,显示工资修改超出范围,操作取消!
1、Please describe the physical storage structure and logical storage structure of the ORACLE database.
①逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库种如何组织、管理数据.因此,逻辑存储结构是和操作系统平台无关的,是由Oracle数据库创建和管理的.
②Oracle通过表空间(tablespace)方式,将逻辑存储从物理存储中抽象出来。表空间在逻辑上是一个或多个段的集合,在物理上是一个或多个数据文件的集合。如果使用“关系分析”术语,则段和数据文件之间存在多对多关系:可以将一个表分布在多个数据文件中,而一个数据文件也可能包含多个表的一部分。Oracle通过在段和文件之间插入表空间实体,解决这种多对多关系的问题。
2、Inputing and operating the following code, Analysis of the function of the code.
DECLARE
X NUMBER(7,2);
BEGIN
SELECT sal INTO x FROM emp WHERE empno = 7788;
IF x < 3000 THEN
UPDATE emp SET sal = 3000
WHERE empno = 7788;
END IF;
END;
更新empno为7788的工资,如果工资小于3000,则把该号员工的工资定为3000
3、请在system模式中建立序列xl,序列起始值是100,步长为1。向system模式下的stu(sno,sname,sage,sex)表中插入一条记录,其中主键sno字段的值来自序列xl,姓名’TOM’,年龄18,性别’男’。
Create table stu values(sno number(8),sname varchar2,sage number(3),sex varchar2);
Create sequence xl;
Insert into stu values(xl.nextval+100,’tom’,18,’男’);
4、请简述游标的作用,并说明操作游标的一般过程。
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
过程:
①定义游标
②打开游标
③提取游标数据
④关闭游标
五、设计题样题:
1、创建一个存储过程,以部门号为参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号、员工名。并且调用该存储过程,要求根据输入部门编号,查询平均工资及输出比平均工资高的员工号、员工名。
CREATE OR REPLACE PROCEDURE show_emp( p_deptno emp.deptno%TYPE)
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT avg(sal) INTO v_sal FROM emp WHERE deptno=p_deptno;
DBMS_OUTPUT.PUT_LINE(p_deptno||' '||'average salary is:' ||v_sal);
FOR v_emp IN (SELECT * FROM emp WHERE deptno=p_deptno AND sal>v_sal) LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '||v_emp.ename);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('The department doesn’’t exists!');
END show_emp;
过程调用语句:
declare
vdeptno emp.detpno%type;
Begin
vdeptno:=&deptno;
show_emp(vdeptno);
End;
2、创建一个函数,以部门号为参数,返回部门名、部门人数及部门平均工资。并且调用该函数,输出所有有员工的部门的名称、部门人数和平均工资。
CREATE OR REPLACE FUNCTION ret_deptinfo( p_deptno dept.deptno%TYPE,
p_num OUT NUMBER, p_avg OUT NUMBER)
RETURN dept.dname%TYPE
AS
v_dname dept.dname%TYPE;
BEGIN
SELECT dname INTO v_dname FROM dept WHERE deptno=p_deptno;
SELECT count(*),avg(sal) INTO p_num,p_avg FROM emp WHERE deptno=p_deptno;
RETURN v_dname;
END ret_deptinfo;
函数调用语句:
DECLARE
v_avgsal emp.sal%TYPE;
v_num NUMBER;
v_dname dept.dname%TYPE;
BEGIN
FOR v_dept IN (SELECT DISTINCT deptno FROM emp) LOOP
v_dname:=ret_deptinfo(v_dept.deptno,v_num,v_avgsal);
DBMS_OUTPUT.PUT_LINE(v_dname||' '||v_maxsal||' '|| v_avgsal||' '||v_num);
END LOOP;
END;
3、创建学生表student(sno,sname,sex,sage),要求学号sno主键,姓名sname不能重复, 性别sex只能是‘男’或者‘女’,年龄sage在15到25之间。创建课程表course(cno,cname),要求课程号cno主键,课程名cname唯一,同时为主键约束列上的唯一性索引设置存储位置和存储参数。创建学生选课表SC(sno,cno,grade),要求成绩grade大于0小于100,有两位小数,sno,cno都是外键,而且sno,cno一起做主键。
CREATE TABLE student(
sno NUMBER(6) CONSTRAINT S_PK PRIMARY KEY,
sname VARCHAR2(20) UNIQUE,
sex CHAR(2) CONSTRAINT S_CK1 CHECK(sex in('男', '女')),
sage NUMBER(6,2) CONSTRAINT S_CK2 CHECK(sage between 15 and 25)
);
CREATE TABLE course(
cno NUMBER(6) PRIMARY KEY,
cname CHAR(20) UNIQUE
USING INDEX TABLESPACE USER
STORAGE (INITIAL 64K NEXT 64K)
);
CREATE TABLE SC(
sno NUMBER(6) REFERENCES student(sno),
cno NUMBER(6) REFERENCES course(cno),
grade NUMBER(5,2) CHECK(grade between 0 and100),
CONSTRAINT SC_PK PRIMARY KEY(sno, cno)
);
4、创建用户user2,口令为user2,默认表空间为USERS,在该表空间的配额为10 MB,初始状态为锁定。创建用户user3,口令为user3,默认表空间为USERS,在该表空间的配额为10 MB,概要文件为example_profile(假设该概要文件已经创建),为用户user2授予CREATE SESSION,CREATE TABLE ,CREATE VIEW系统权限。user2获得权限后,为用户user3授予CREATE TABLE权限。然后回收user2的CREATE TABLE权限。
SQL> conn system/oracle@orcl 或者 conn / as sysdba 仅供参考,正确就行
SQL>CREATE USER user2IDENTIFIED BY user2
DEFAULT TABLESPACE USERS QUOTA 10M ON USERS
ACCOUNT LOCK;
SQL> CREATE USER user3 IDENTIFIED BY user3
DEFAULT TABLESPACE USERS
QUOTA 10M ON USERS
PROFILE example_profile ;
SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW
TO user2 WITH ADMIN OPTION;
SQL> CONNECT user2/user2 @ORCL
SQL> GRANT CREATE TABLE TO user3;
SQL> conn system/oracle@orcl 或者 conn / as sysdba
SQL> revoke CREATE TABLE from user2;
5、使用EXPDP导出scott模式相关数据,并使用IMPDP 将刚刚导出的scott模式相关数据导入到system模式,写出核心操作语句。
1、创建DIRECTORY :create directory dir_dp as 'D:/oracle/dir_dp';
2、授权 :Grant read,write on directory dir_dp to scott;
3、执行导出
expdp scott/tiger@orcl schemas=scott directory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log;
4、执行导入
impdp system/oracle@orcl directory=dir_dp dumpfile =expdp_test1.dmp remap_schema=scott:system logfile=impdp_test1.log;
1. 根据要求,完成以下题目。注意:通过scott用户下的emp表实现(empno员工号,ename员工名,sal工资,deptno 部门号)。
(1)创建一个存储过程,以部门号为参数,输出该部门的人数。(10分)
Create or replace procedure process(dno number,dept_num out number)
Is
Begin
Select count(*) into dept_num from emp where deptno = dno;
Dbms_output.put_line(dept_num);
End;
2创建一个函数,以部门号为参数,返回该部门的平均工资。(10分)
Create or replace function get_sal_avg(dept number)
Return number
Is
V_avg number(8,2);
begin
Select avg(sal) into V_sal from emp where deptno = dept;
Return V_sal;
End;
或
Create or replace function get_avg_sal (dept number)
Retuen number
Is
V_sum number(8,2) := 0;
V_count number(8,2) := 0;
Cursor sal_emp is select salary from emp where deptno = dept;
Begin
For c in sal_emp loop
V_sum := V_sum + c.salary;
V_count := V_count + 1;
End loop;
Return V_sum/V_count;
End;
2. 在SCOTT模式下有两个结构完全相同的表emp和emp_copy。每当向emp表插入一条新的记录时,ORACLE自动将新插入的记录复制到emp_copy表中请创建一个触发器tg_emp_insert实现上述要求的功能。(10分)
(说明:emp表的结构如下:emp(empno,ename,job,depno,sal,hiredate,comm)
create or replace trigger copy_trigger
after
insert on emp
for each row
begin
insert into emp_copy
values(:new.empno,:new.ename,:new.job,:new.depno,:new.sal,:new.hireda te,:new.comm);
end;