实验指导书——大型数据库应用(7)

2019-05-24 17:42

如果想运行缓冲区的内容,那么可以用RUN命令或者/命令。 2.无参数的存储过程 首先创建表:

SQL> create table log_table( 2 user_id varchar2(10), 3 log_date varchar2(12));

CREATE OR REPLACE PROCEDURE log_execution IS

BEGIN

INSERT INTO log_table (user_id,log_date) VALUES (user,sysdate); END; /

存储过程的在SQL*Plus中运行 SQL>EXECUTE log_execution;

3.带输入参数的存储过程

解雇给定职工号的职工,并调用log_execution: SQL> CREATE OR REPLACE PROCEDURE fire_emp

2 (v_emp_no IN emp.empno%type) 3 IS

4 BEGIN

5 Log_execution;

6 DELETE FROM EMP WHERE empno = v_emp_no; 7 END; 8 /

SQL>EXECUTE fire_emp(7654);

存储过程删除了职工号7654的职工。

4.带输入输出的存储过程

查询EMP中给定职工号的姓名、工资和佣金。

SQL> CREATE OR REPLACE PROCEDURE query_emp 2 (v_emp_no IN emp.empno%type, 3 v_emp_name OUT emp.ename%type, 4 v_emp_sal OUT emp.sal%type, 5 v_emp_comm OUT emp.comm%type) 6 IS

7 BEGIN

8 SELECT ename,sal,comm

9 INTO v_emp_name,v_emp_sal,v_emp_comm 10 FROM EMP WHERE empno = v_emp_no;

11 END; 12 /

调用:

SQL>VAR emp_name varchar2(15); SQL>VAR emp_sal number; SQL>VAR emp_comm number;

SQL>EXECUTE query_emp(7566,:emp_name, :emp_sal, :emp_comm); PL/SQL procedure successfully completed. SQL>PRINT emp_name EMP_NAME ------------------- JONES

或者用以下语句调用: DECLARE

emp_name varchar2(15); emp_sal number; emp_comm number; BEGIN

query_emp(7566,emp_name, emp_sal, emp_comm);

DBMS_OUTPUT.PUT_LINE(emp_name||' '|| emp_sal||' '||emp_comm); END;

5.用Function查询出EMP中给定职工号的工资 SQL> CREATE OR REPLACE FUNCTION get_sal

2 (v_emp_no IN emp.empno%type) 3 RETURN number 4 AS

5 V_emp_sal emp.sal%type:= 0; 6 BEGIN

7 SELECT sal INTO v_emp_sal

8 FROM EMP WHERE empno = v_emp_no; 9 RETURN (v_emp_sal); 10 END; 11 /

SQL>VARIABLE emp_sal number;

SQL>EXECUTE :emp_sal := get_sal(7566); PL/SQL procedure successfully completed. SQL>PRINT emp_sal; EMP_SAL ------------------- 2975

【实验内容】

1、查询名为“SMITH”的员工信息,输出其员工号、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2007,员工名为“SMITH”,工资为1500,部门号为10. 2、创建一个存储过程,以员工号为参数,输出该员工的工资。

3、创建一个存储过程,以员工号为参数,修改该员工的工资。若该员工属于10号部门,则工资增加150;若属于20号部门,则工资增加200;若属于30号部门,则工资增加250;若属于其他部门,则工资增加300.

4、创建一个存储过程,以员工号为参数,返回该员工的工作年限(以参数形式返回)。 提示:可以采用日期函数months_between求工作的月份

5、创建一个函数,以员工号为参数,返回该员工所在部门的平均工资。

6、在emp表上创建一个触发器,当插入、删除或修改员工信息时,统计各个部门的人数及平均工资,并输出。

7、在dept表上创建触发器,保证该表的记录的删除可以成功完成。

8、在dept表上创建触发器,使得当DEPT表的deptno(主键)发生变化时,EMP表的相关行也要跟着进行适当的修改。

9、创建一个存储过程,以一个整数为参数,输出工资最高的前几个(参数值)员工的信息。 10、创建一个存储过程,以两个整数为参数,输出工资排序在两个参数之间的员工信息。 11、创建一个包,包中包含一个函数和一个过程。函数以部门号为参数,返回该部门员工的最高工资;过程以部门号为参数,输出该部门中工资最高的员工名、员工号。

实验六 简单的选课系统的设计与实现

【开发语言及实现平台或实验环境】

Oracle10g

【实验目的】

(1)进一步熟悉和掌握以上所有实验中的各种操作。 (2)能够在实际的事例中灵活运用学到的有关知识。 (3)能够编写满足某种要求的功能。

【实验原理】

参考以上几个实验。

【实验内容】

(1)为自己建立用户帐号(以学号为帐号)。

(2)以新建的帐号登录数据库,创建如下三个基表结构并输入相应表内容:

S (S#,SNAME,AGE,SEX) 对应的中文为: [学生 (学号,姓名,年龄,性别)]

SC (S#,C#,GRADE) 对应的中文为: [选课(学号,课程号,成绩)]

C(C#,CNAME,TEACHER) 对应的中文为: [课程(课程号,课程名,任课教师)] (3)用INSERT 命令输入数据

表1 基本表S的数据 S1 WANG 20 M S2 LIU 19 M S5 LOU 21 F S8 DONG 18 F

表2 基表C的数据 C1 MATHS MA C2 CHEMISTRY ZHOU C3 DB LI C5 OS WEN

表3 基本表SC的数据(空格为未选修) S# S1 S2 S5 S8 C# C1 80 85 70 90 C2 70 NULL 60 NULL C3 85 72 80 90 C5 70 65 65 NULL

(4)对S、C、SC表进行操作

1)把C2课程的非空成绩提高10%。

2)在S和SC表中删除学号为S8的所有数据。 (5)对基本表S、C、SC操作 1) 检索选修课程名为MATHS的学生学号与姓名。 2) 检索不学C2课的学生姓名与年龄。 3) 计算每个学生有成绩的课程门数和平均成绩。 (6)用PL/SQL的存储过程删除学号为S8的学生;

(7)用带输入输出参数的存储过程查询出任意给定学号和课程后的成绩; (8)用函数作第7题。


实验指导书——大型数据库应用(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年华罗庚金杯少年数学邀请赛香港赛区决赛初中一年级组试题答

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

马上注册会员

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