oracle database 10g 期末考复习资料 - 图文(5)

2019-08-01 23:32

///////用户登录到数据库时,会自动激活其默认角色 SQL>conn allen/allen

SQL>SELECT ename,sal FROM scott.emp WHERE empno=7788; SQL>UPDATE scott.emp SET sal=4000 WHERE empno=7788; ORA-01031:权限不足

激活PRV_ROLE角色,重新修改SCOTT.EMP表中雇员号为7788的雇员SAL列数据为4000。

/////为了使用非默认角色的权限操作,必须激活非默认角色。 SQL>SET ROL prv_role IDENTIFIED BY prv;

SQL>UPDATE scott.emp SET sal=4000 WHERE empno=7788;

显示用户ALLEN所具有的角色以及默认角色。

//////为了显示用户所具有的角色信息,可以查询数据字典视图DBA_ROLE_PRIVS. SQL>SELECT granted_role,default_role FROM dab_role_privs WHERE grantee=?ALLEN?;

实验七 PL/SQL基础

简述PL/SQL语言的特点。

PL/SQL语言是Oracle数据库专用的一种高级程序设计语言,是对标准SQL语言进行了过程化扩展的语言。具有如下特点:

与SQL语言紧密集成,所有的SQL语句在PL/SQL中都得到支持; 减小网络流量,提高应用程序的运行性能。 模块化的程序设计功能,提高系统可靠性。 服务器端程序设计,可移植性好。

简述游标的作用和游标操作的基本步骤。

游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。游标的基本操作步骤为声明游标、打开游标、检索游标、关闭游标。

编写一个PL/SQL块,输出所有员工的员工名、员工号、工资和部门号。 DECLARE

CURSOR C_EMP IS SELECT * FROM EMP; BEGIN

OPEN C_EMP;

FOR V_EMP IN C_EMP LOOP

―――FOR V_EMP IN (SELECT * FROM EMP) LOOP DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME||' '||V_EMP.EMPNO||' '||V_EMP.DEPTNO||' '||V_EMP.SAL); END LOOP; END;

第 21 页 共 27 页

查询名为“SMITH”的员工信息,并输出其员工号、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2007,员工名为“SMITH”,工资为1500,部门号为10。如果存在多个名为“SMITH”的员工,则输出所有名为“SMITH”的员工号、工资和部门号。 DECLARE

V_EMP EMP%ROWTYPE; BEGIN

SELECT * INTO V_EMP FROM EMP WHERE ENAME='SMITH'; DBMS_OUTPUT.PUT_LINE(V_EMP.EMPNO||' '||V_EMP.SAL||' '||V_EMP.DEPTNO); EXCEPTION

WHEN NO_DATA_FOUND THEN INSERT INTO EMP(EMPNO,ENAME,SAL,DEPTNO) VALUES(2007,'SMITH',1500,10); WHEN TOO_MANY_ROWS THEN

FOR V IN (SELECT * FROM EMP WHERE ENAME='SMITH') LOOP DBMS_OUTPUT.PUT_LINE(V.EMPNO||' '||V.SAL||' '||V.DEPTNO); END LOOP; END;

实验八 管理表、索引、视图

表的约束有几种,分别起什么作用? 表的约束包括: ? 主键约束:定义了主键约束的列取值不能为空,也不能重复。 ? 唯一值约束:定义了唯一值约束的列取值不能重复。 ? 检查约束:定义了检查约束的列取值要满足检查条件。 ? 外键约束:定义了外键约束的列取值要么是主表参照列的值,要么是空值。 ? 空/非空约束:定义了非空约束的列取值不能为空。 操作题

(1)按下表结构利用SQL语句创建class、student两个表。

第 22 页 共 27 页

Create table class(

CNO number(2) primary key, CNAME varchar2(20), NUM number(3) )

Create table student(

SNO number(4) primary key, SNAME varchar2(10) unique, SAGE number, SEX char(2), CNO number(2) )

(2)为student表添加一个可以延迟的外键约束,其CNO列参照class表的CNO列。 Alter table student add constraint fk_cno foreign key (cno) references class(cno) deferrable;

(3)为student表的SAGE列添加一个检查约束,保证该列取值在0~100之间。 Alter table student add constraint ck_sage check (sage>0 and sage<=100);

(4)为student表的SEX列添加一个检查约束,保证该列值为“M”或“F”,且默认值“M”。 alter table student add constraint ck_stu check(sex='M' or sex='F')modify sex default 'M'

索引

第 23 页 共 27 页

说明索引的作用,以及ORACLE数据库中索引的类型。

索引用于提高数据的查询效率。根据索引值是否唯一,可以分为唯一性索引和非唯一性索引;根据索引的组织结构不同,可以分为平衡树索引和位图索引;根据索引基于的列数不同可以分为单列索引和复合索引。

说明数据库中使用索引的优点和缺点,以及索引是如何工作的。

在数据库中使用索引可以提高对表中数据的查询速度,但是,向表中插入数据需要更新索引,会影响更新速度。如果表建了索引,在有条件查询时,系统先对索引表进行查询,利用索引表可以找到相应记录的ROWID。索引建好后,由系统负责更新。

基于第3题(1)的表,完成下面题目

(1)在class表的CNAME列上创建一个唯一性索引。 Create unique index ind_cname on class(cname);

视图

(2)创建一个视图,包含员工号、员工名和该员工领导的员工号、员工名。 Create view employee_v(empno,ename,mgr_no,mgr_name) As

Select e1.empno,e1.ename,e1.mgr,e2.ename from emp e1 join emp e2 on e1.mgr=e2.empno;

(3)创建一个class_number簇,聚簇字段名为CNO,类型为NUMBER(2),然后利用该簇,创建student和class两个聚簇表。

Create cluster class_number(cno NUMBER(2));

Create table class(

CNO number(2) primary key, CNAME varchar2(20), NUM number(3)

)Cluster class_number(cno);

Create table student(

SNO number(4) primary key, SNAME varchar2(10) unique, SAGE number, SEX char(2), CNO number(2)

)Cluster class_number(cno);

(4)创建一个起始值为10000的序列,步长为2,最大值为100000,不可循环。 Create sequence sequ1 increment by 2 start with 10000 maxvalue 100000 nocycle;

第 24 页 共 27 页

(5)为SCOTT模式下的emp表创建一个公共同义词,名称为employee。 Create public synonym employee for scott.emp;

实验九 过程、函数、程序包

创建一个存储过程,以员工号为参数,输出该员工工资。

CREATE OR REPLACE PROCEDURE SHOWSAL(p_empno emp.empno%type) AS

v_sal emp.sal%TYPE; BEGIN

SELECT sal INTO v_sal FROM emp WHERE empno=p_empno; DBMS_OUTPUT.PUT_LINE(v_sal); END;

begin

showsal(7844); end;

创建一个存储过程,以员工号为参数,修改该员工的工资。若该员工属于10号部分,则工资增加150;若属于20号部门,则工资增加200;若属于30号部门,则工资增加250;若属于其他部门,则工资增长300。 CREATE OR REPLACE PROCEDURE UPDATESAL (p_empno emp.empno%TYPE) AS

v_deptno emp.deptno%TYPE; v_inc emp.sal%TYPE; BEGIN

SELECT deptno INTO v_deptno FROM emp WHERE empno=p_empno; CASE v_deptno

WHEN 10 THEN v_inc:=150; WHEN 20 THEN v_inc:=200; WHEN 30 THEN v_inc:=250; ELSE v_inc:=300; END CASE;

UPDATE emp SET sal=sal+v_inc WHERE empno=p_empno; END;

创建一个函数,以员工号为参数,返回该员工工资。

CREATE OR REPLACE FUNCTION fun_sal(p_empno emp.empno%type) RETURN emp.sal%TYPE AS

v_sal emp.sal%TYPE; BEGIN

SELECT sal INTO v_sal FROM EMP WHERE empno=p_empno;

第 25 页 共 27 页


oracle database 10g 期末考复习资料 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014 安全培训教案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: