1.创建表并生成测试数据create table T_GRADES
(
ID VARCHAR2(20) PRIMARY KEY,
SUBJECT VARCHAR2(20),
GRADE NUMBER(3,1),
TEACHER VARCHAR2(20),
STUDENTID VARCHAR2(20)
);
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('1', '语文', 80, 'Miss_zhang', '050104010121');
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('2', '数学', 90, 'Miss_zhang', '050104010121');
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('3', '数学', 90, 'MR_huang', '050104010120');
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('4', '英语', 90, 'MR_huang', '050104010120');
commit;
create table T_GRADES
(
ID VARCHAR2(20) PRIMARY KEY,
SUBJECT VARCHAR2(20),
GRADE NUMBER(3,1),
TEACHER VARCHAR2(20),
STUDENTID VARCHAR2(20)
);
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('1', '语文', 80, 'Miss_zhang', '050104010121');
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('2', '数学', 90, 'Miss_zhang', '050104010121');
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('3', '数学', 90, 'MR_huang', '050104010120');
insert into T_GRADES (ID, SUBJECT, GRADE, TEACHER, STUDENTID)
values ('4', '英语', 90, 'MR_huang', '050104010120');
commit;
2.创建控制视图的包CREATE OR REPLACE PACKAGE pkg_view_grades IS
v_teacher t_grades.teacher%TYPE;
PROCEDURE prc_setTeacher(teacher IN VARCHAR2);
FUNCTION fun_getTeacher RETURN VARCHAR2;
END pkg_view_grades;
/
CREATE OR REPLACE PACKAGE BODY pkg_view_grades IS
PROCEDURE prc_setTeacher(teacher IN VARCHAR2) IS
BEGIN
v_teacher := teacher;
END prc_setTeacher;
FUNCTION fun_getTeacher RETURN VARCHAR2 IS
BEGIN
RETURN v_teacher;
END fun_getTeacher;
END pkg_view_grades;
/
CREATE OR REPLACE PACKAGE pkg_view_grades IS
v_teacher t_grades.teacher%TYPE;
PROCEDURE prc_setTeacher(teacher IN VARCHAR2);
FUNCTION fun_getTeacher RETURN VARCHAR2;
END pkg_view_grades;
/
CREATE OR REPLACE PACKAGE BODY pkg_view_grades IS
PROCEDURE prc_setTeacher(teacher IN VARCHAR2) IS
BEGIN
v_teacher := teacher;
END prc_setTeacher;
FUNCTION fun_getTeacher RETURN VARCHAR2 IS
BEGIN
RETURN v_teacher;
END fun_getTeacher;
END pkg_view_grades;
/
3.创建视图create view grades as select *From t_grades where teacher=pkg_view_grades.fun_getTeacher();
create view grades as select *From t_grades where teacher=pkg_view_grades.fun_getTeacher();
4.使用介绍
很明显,该视图能够实现不同的老师看到的学生成绩只能是自己所教的学生的成绩,不会看到其他老师的成绩,这样当我们在开发应用程序时能够通过当前登录的用户,动态的展现该视图的内容。
4.1 设置参数值:
通过pkg_view_grades.prc_setTeacher('MR_huang');来改变参数的值,这里“老师”可以随便设置,开发应用时可以动态地指定。
4.2 查询视图 :
select * from grades;返回的肯定是指定老师管辖学生的信息。
5.延伸扩展
如果需要更加精细的控制,可以扩展包,增加变量和方法来达到控制的目的。怎么样,看起来是不是很像javabean啊!其实“包”就是一个类,里面封装了很多方法。