【Oracle】数据库数据设计课设

一、根据字段及类型提示创建以下四张表

1.创建EMPS:雇员表

记录一个雇员的基本信息

插入数据

INSERT INTO EMPS VALUES (7369, 'SMITH', 'CLERK', 7902,
'17-12月-1980', 800, NULL, 20);
INSERT INTO EMPS VALUES (7499, 'ALLEN', 'SALESMAN', 7698,
'20-2月-1981', 1600, 300, 30);
INSERT INTO EMPS VALUES (7521, 'WARD', 'SALESMAN', 7698,
'22-2月-1981',  1250, 500, 30);
INSERT INTO EMPS VALUES (7566, 'JONES', 'MANAGER', 7839,
'2-4月-1981', 2975, NULL, 20);
INSERT INTO EMPS VALUES (7654, 'MARTIN', 'SALESMAN', 7698,
'28-9月-1981',  1250, 1400, 30);
INSERT INTO EMPS VALUES (7698, 'BLAKE', 'MANAGER', 7839,
'1-5月-1981', 2850, NULL, 30);
INSERT INTO EMPS VALUES (7782, 'CLARK', 'MANAGER', 7839,
'9-6月-1981',  2450, NULL, 10);

 

2.创建DEPTS:部门表

记录一个部门的具体信息

插入数据 

INSERT INTO DEPTS VALUES (10,'ACCOUNTING','NEW YORK'); 
INSERT INTO DEPTS VALUES (20,'RESEARCH','DALLAS'); 
INSERT INTO DEPTS VALUES (30,'SALES','CHICAGO');  
INSERT INTO DEPTS VALUES (40,'OPERATIONS','BOSTON');

3.创建BONUSS:奖金表

记录一个雇员的工资及奖金

4.创建SALGRADES:工资等级表
记录一个工资的等级

插入数据

INSERT INTO SALGRADES VALUES (1,700,1200); 
INSERT INTO SALGRADES VALUES (2,1201,1400); 
INSERT INTO SALGRADES VALUES (3,1401,2000); 
INSERT INTO SALGRADES VALUES (4,2001,3000); 
INSERT INTO SALGRADES VALUES (5,3001,9999);

二.根据第一题的四张表的完成以下sql语句

1.Oracle PL/SQL程序块

(1)编写一个程序块,从emps表中显示名为“SMITH”的雇员的薪水和职位。

declare
v_emp emp%rowtype; //该类型是表中某行的相数据类型的变量
begin 
  select * into v_emp from emps where ename='SMITH'; //从emps表中查询smith插入
dbms_output.put_line('工作是'||v_emp.job||';薪水是'||v_emp.sal); //输出显示
end;

 

(2)编写一个程序块,接受用户输入一个部门号,从depts表中显示该部门的名称与所在位置。

//传统方法进行操作
declare
v_loc depts.loc%type; //定义同类型所需的变量--所在位置
v_dname depts.dname%type;//定义同类型所需的变量--部门名称
v_deptno depts.deptno%type;
begin
v_deptno :=&部门编号;
select loc,dname intv_deptno :=&部门编号o v_loc,v_dname from depts where deptno = v_deptno;
dbms_output.put_line('所在位置是'||v_loc||';部门的名称是'||v_dname);
end;  

 

(3)编写一个程序块,利用%type属性,接受一个雇员号,从emps表中输出该雇员的整体薪水(即,薪水加佣金)。

declare
v_sal emps.sal%type;  //定义同类型所需的参数--薪水
begin
select sal+comm into v_sal from emps where empno = &雇员号; //根据雇员号匹配,把薪水+佣金放入行级变量
dbms_output.put_line('整体薪水是'||v_sal);
end;

 

2.Oracle使用游标

 (1)通过使用游标来显示depts表中的部门名称;

declare
cursor cur is select * from depts;
begin
  for v_depts in cur
    loop
      dbms_output.put_line(v_depts.dname);
     end loop;
end;

 

(2)使用loop循环,输出depts表中的所有数据;

declare
cursor ps is select * from depts;
begin 
for v_depts in ps
  loop
    dbms_output.put_line('部门编号是:'||v_depts.deptno||'部门的名称是;'||v_depts.dname||'所在位置是:'||v_depts.loc);
  end loop;
end;

 

(3)使用For循环,接受一个部门号,从emps表中显示该部门的所有雇员的姓名,工作和薪水;

declare 
cursor a3 is select * from emps where deptno = &部门编号;
begin
  for v_emps in a3
  loop
    dbms_output.put_line('雇员的姓名:'||v_emps.ename||';工作:'||v_emps.job||';薪水:'||v_emps.sal);
  end loop; //退出游标
end; //关闭

 

3.Oracle存储过程

(1)创建一个过程,能向depts表中添加一个新记录

create or replace procedure d1  //or replace:已有过程则替换更新
( v_dname in  depts.dname%type,
v_deptno in depts.deptno%type,
v_loc in depts.loc%type) is
begin
  insert into depts
  values (v_deptno,v_dname,v_loc);
  commit;
end;

 

(2)从emps表中查询给定职工(提示:使用&来输入员工编号)的职工姓名和工资。

create or replace procedure d2
( v_no in emps.empno%type, //读入
v_name out emps.ename%type, //读出,out可以改变变量数值
v_sal out emps.sal%type ) is
begin
select ename,sal into v_name,v_sal from emps where empno = v_no;
dbms_output.put_line(v_name||'------'||v_sal);
end;

 

(3)创建存储过程,根据员工编号删除emps表中的相关记录。

create or replace procedure d3
(v_empno  emps.empno%type ) is  //定义同类型变量
begin 
  delete from emps where empno = v_empno;
  commit;
  dbms_output.put_line('删除员工编号为:'||v_empno); //打印
end;

 

4.Oracle存储函数

(1)创建一个函数,以员工号为参数,返回该员工的工资

create or replace function f1(v_empno emps.empno%type ) return emps.sal%type is  //创建函数,控制同类型变量
v_sal emps.sal%type;  
begin
  select sal into v_sal from emps where empno = v_empno;
  return v_sal;
end;

 

(2)创建一个函数,以部门号为参数,返回该部门的平均工资

create or replace function f2(v_deptno emps.deptno%type) return emps.sal%type is
avg_sal emps.sal%type;
begin
  select avg(sal) into avg_sal from emps where deptno = v_deptno group by deptno;
  return avg_sal;
end;

 

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

create or replace function f3(v_empno emps.empno%type) 
return emps.sal%type is
avg_sal emps.sal%type;
v_deptno emps.deptno%type;
begin 
  select deptno into v_deptno from emps where empno = v_empno; //先查员工号
  select avg(sal) into avg_sal from emps where deptno = v_deptno group by deptno;
  return avg_sal;  //返回平均薪资
end;

 

5.Oracle触发器

(1)创建触发器,比较emps表中更新的工资

create or replace trigger t1 //创建触发器
before update of sal on emps //更新薪资操作之前
for each row //行级触发器
begin
  if (:old.sal < :new.sal) then dbms_output.put_line('工资上升');
  elsif  (:old.sal > :new.sal) then dbms_output.put_line('工资下降');
  else dbms_output.put_line('工资不变');
  end if;
end; 

 

(2)创建触发器,用来记录表的删除数据

创建记录表
--首先创建一个旧的表用来删除数据
create or replace trigger t2
before delete on depts
for each row
begin
  insert into depts_delete_copy values(:old.deptno,:old.dname,:old.loc);
  dbms_output.put_line('删除成功');
end;
触发器
create or replace trigger t2
before delete on depts
for each row
begin
  insert into depts_delete_copy values(:old.deptno,:old.dname,:old.loc);
  dbms_output.put_line('删除成功');
end;

  

(3)当用户对dept表执行DML语句时,将相关信息记录到日志表

create or replace trigger t3
after delete or insert or update on depts
for each row
declare
v_type depts_log.l_type%type;
begin
  if inserting then
    v_type := 'insert';
    dbms_output.put_line('记录已经成功插入,并已记录到日志');
  elsif updating then 
    v_type := 'update';
    dbms_output.put_line('记录已经成功更新,并已记录到日志');
  elsif deleting then 
    v_type := 'delete';
    dbms_output.put_line('记录已经成功删除,并已记录到日志');
  end if;
  insert into depts_log values
  (v_type,to_char(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
end;
创建日志记录表:
create table depts_log(
    l_type varchar2(15),
	l_time varchar2(30)
);

 

 

 

 

 

 

 

 

  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
课 程 设 计 报 告 书 目 录 第 1 章 引言.............................................................................3 第 2 章 概要设计.....................................................................5 2.1 系统需求分析.................................................................5 2.2 系统结构设计.................................................................5 2.3 系统功能模块.................................................................6 第 3 章 数据库分析.................................................................7 3.1 数据库总体设计............................................................7 3.2 数据设计....................................................................7 3.3 数据库的创建................................................................8 3.4 存储过程和触发器.........................................................9 第 4 章 详细设计及测试.......................................................11 4.1 系统界面......................................................................11 4.2 主要代码设计..............................................................15 4.3 功能整体链接测试......................................................18 第 5 章 课程设计心得...........................................................19 第 1 章 引言 1.设计目的 使用 VC,C++,C#等作为前台开发工具,使用 Oracle 作为后台数据库,所 设计的管理系统应包含输入输出、查询、插入、修改、删除等基本功能。根据 题目的基本需求,设计系统界面、数据库、编写程序(Oracle),并写出课程设 计报告 1、阅读资料:每个人必须提前阅读教材有关 Oracle、VC、C++、C#应用方 面的内容以及其它相关书籍。 2、需求分析:题目要求达到的功能,所提供的原始数据,需要输出的数据 及样式等。 3、数据库设计:根据要求设计数据库的结构,包括:表、数据完整性、 关系、视图。 4、数据库的安全性设计:登录用户、数据库用户、数据库角色、命令许可 等方面 涉及到数据的所有操作要求采用存储过程的方式进行。 2.设计要求 1. 选好题目:先分组,每组两个人(或单独完成) ,必须确保每题有两组 人员选做,班长将本班同学的选题情况汇总后于 16 周之前交。 2. 独立思考, 独立完成: 课程设计中各任务的设计和调试要求独立完成, 遇到问题可以讨论,但不可以拷贝,否则不管是抄袭还是被抄袭,雷同的全部 直接评定为不及格。 3. 做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想 好调试步骤和有关环境的设置方法,准备好有关的文件。 4. 根据编程实现的结果,按课程设计报告的撰写规范完成数据库系统课 程设计报告(课程设计报告中必须有相关原理分析、程序设计、程序实现和程 序调试等内容) ;课程设计报告的具体要求如下: 1) 课设报告按照规定用 A4 纸张进行排版打印,否则要求返工; 2) 课设报告的内容顺序如下:封面—任务书—中文摘要—目录—正文— 附录; 3) 正文不少于 4000 字, 正文部分至少包含以下内容, 并可大致作如下安 排 1.引言(包括设计目的、要求、设计环境、同组人员及分工等内容) 2.概要设计(含系统需求分析、系统结构设计和功能模块设计等内容) 3.详细设计(含系统数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米莱虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值