1、实验一 2(4 ) (4)在 Oracle 的安装目录下找到当前已安装的 TEST 数据库的所有物理文件,分类写出文件名称。 (1)文件类型是 Visual Basic User Control: CONTROL01、CONTROL02、CONTROL03、 (3)文件类型是文本文档:RED001 、 RED002、RED003实验二 2 (2 ) 查询性别为女生的平均成绩。 select avg(grade) 女生的平均成绩 from sc,student s where ssex=女 and s.sno=sc.sno 查询选修了课程号为 3 的所有学生的姓名。select sname fr
2、om sc , s where cno=3 and s.sno=sc.sno; 查询既选修了课程 2 又选修了课程 3 的学生姓名和学号。 select sname,s.sno from sc,student s where sc.sno=s.sno and cno=2 and sc.sno in (select sno from sc where cno=3); select sname,s.sno from sc,student s where sc.sno=s.sno and cno=2 intersect select sname,s.sno from sc,s where sc.sn
3、o=s.sno and cno=3; 查询与“孙兰”在同一个系学习的学生 select sno,sname,sclass from student where sclass in (select sclass from student where sname=孙兰); select s1.sno,s1.sname,s1.sclass from student s1,student s2 where s1.sclass=s2.sclass and s2.sname=孙兰实验 3 (1)创建一个过程 avg_sal,用于输出 emp 表中的某个部门的平均工资,并在PL/SQL 匿名块调用该过程输出
4、部门 SALES 的平均工资; create or replace procedure avg_sal(depName in varchar2, avgSal out number) is begin select avg(sal) into avgSal from emp,dept where emp.deptNo=dept.deptNo and dname=depName group by emp.deptNo; dbms_output.put_line(部门|depName|的平均工资是|to_char(avgSal); end测试函数: set serveroutput on; dec
5、lare dname dept.dname%type; avgSal emp.sal%type; begin dname:=ACCOUNTING; avg_sal(dname,avgsal); end; (2)创建一个函数 sum_n(n int), 用于输出在 1 到 n 之间的偶数之和,并条用该函数,输出 1 到 1500 之间的偶数和。 CREATE OR REPLACE FUNCTION SUM_N(N NUMBER ) RETURN NUMBER AS I NUMBER(3); SUM_VAL NUMBER:=0; BEGIN FOR I IN 1N LOOP IF MOD(I+1,
6、2)!=0 THEN SUM_VAL:=SUM_VAL+I; END IF; END LOOP; RETURN SUM_VAL; END SUM_N;测试函数: declare n number; begin n:=10; dbms_output.put_line(sum_n(1500); end;(2 )创建一个函数 find_loc, 用于返回某个员工所在的工作地点。并调用该函数,显示员工号为 7788 的工作地点。 CREATE OR REPLACE FUNCTION find_loc(emp_no NUMBER) RETURN VARCHAR2 AS location VARCHAR2
7、(13); BEGIN SELECT loc INTO location FROM emp, dept WHERE emp.deptno=dept.deptno AND empno=emp_no; RETURN location; END find_loc; (3)创建一个触发器 tr_emp_sal,当进行 update 操作时,员工的工资只能涨不能降,不允许删除员工记录。 create or replace trigger tr_emp_sal before update of sal or delete on emp for each row begin case when updati
8、ng(sal) then if :new.sal-:old.sal0 then raise_application_error(-20001, 员工的工资只能涨不能降!); end if; when deleting then raise_application_error(-20002, 不能删除员工记录!); end case; end;Oracle 复习/ch1 数据库的完整性,有哪些约束/ch2 体系结构/物理:物理文件(数据、控制、日志)/逻辑:表空间、段、区、数据块/ 进程:7 个进程内存:SGA/PGA/数据字典/ch3/SQL*Plus 命令:DESC/SAVE/GET/EDIT/START/COLUMN/ACCEPT 例 3.17/ch4 创建基本表空间和临时表空间/ch5 表、视图、索引和序列的创建ch6 备份控制文件、管理日志文件组/ch7、ch8 select 语句/ch9 /IF 语句例 9.7/CASE 语句例9.8/游标:声明、打开、检索和关闭ch10/存储过程、函数和触发器的创建/触发器的两种级别