自动化pl \ sql函数

时间:2011-11-27 19:22:26

标签: oracle plsql oracle11g

我希望自动化注册系统,以便自动注册学生。然后我想要一个程序来自动化评分系统。我已经包含了我编写的代码,以使大部分此类赋值工作完成,但不确定如何将PL \ SQL自动化函数合并到注册系统和分级系统中。所以任何帮助或想法,我将非常感谢。

set Linesize 250
set pagesize 150

drop table student;
drop table faculty;
drop table Course;
drop table Section;
drop table location;
DROP TABLE courseInstructor;
DROP TABLE Registration;
DROP TABLE grade;

create table student( 
studentid   number(10),
Lastname    varchar2(20),
Firstname   Varchar2(20),
MI              Char(1),
address             Varchar2(20),
city         Varchar2(20),
state        Char(2),
zip      Varchar2(10),
HomePhone        Varchar2(10),
Workphone        Varchar2(10),
DOB      Date,
Pin VARCHAR2(10),
Status  Char(1));

ALTER TABLE Student 
Add Constraint Student_StudentID_pk Primary Key (studentID);

Insert into student values (1,'xxxxxxxx','xxxxxxxxxx','x','xxxxxxxxxxxxxxx','Columbus','oh','44159','xxx-xxx-xxxx','xxx-xxx-xxxx','06-Mar-1957','1211','c');    

create table faculty(
FacultyID   Number(10),
FirstName   Varchar2(20),
Lastname    Varchar2(20),
MI  Char(1),
workphone   Varchar2(10),
CellPhone   Varchar2(10),
Rank    Varchar2(20),
Experience  Varchar2(10),
Status  Char(1));

ALTER TABLE Faculty
ADD Constraint Faculty_facultyId_PK PRIMARY KEY (FacultyID);

insert into faculty values (1,'xxx','xxxxxxxxxxxx','xxx-xxx-xxxx','xxx-xxx-xxxx','professor','20','f');

create table Course(
CourseId        number(10),
CourseNumber    Varchar2(20),
CourseName      Varchar(20),
Description     Varchar(20),
CreditHours     Number(4),
Status      Char(1));

ALTER TABLE Course
ADD Constraint Course_CourseID_pk PRIMARY KEY(CourseID);

insert into course values (1,'cit 100','computer concepts','introduction to PCs','3.0','o');
insert into course values (2,'cit 101','Database Program','Database   Programming','4.0','o');
insert into course values (3,'Math 101','Algebra I','Algebra I Concepts','5.0','o');
insert into course values (4,'cit 102a','Pc applications','Aplications 1','3.0','o');
insert into course values (5,'cit 102b','pc applications','applications 2','3.0','o');
insert into course values (6,'cit 102c','pc applications','applications 3','3.0','o');
insert into course values (7,'cit 103','computer concepts','introduction systems','3.0','c');
insert into course values (8,'cit 110','Unified language','UML design','3.0','o');
insert into course values (9,'cit 165','cobol','cobol programming','3.0','o');
insert into course values (10,'cit 167','C++ Programming 1','c++ programming','4.0','o');
insert into course values (11,'cit 231','Expert Excel','spreadsheet apps','3.0','o');
insert into course values (12,'cit 233','expert Access','database devel.','3.0','o');
insert into course values (13,'cit 169','Java Programming I','Java Programming I','3.0','o');
insert into course values (14,'cit 263','Visual Basic','Visual Basic Prog','3.0','o');
insert into course values (15,'cit 275','system analysis 2','System Analysis 2','3.0','o');



create table Section(
SectionID       Number(10),
CourseId        Number(10),
SectionNumber   VarChar2(10),
Days        Varchar2(10),
StartTime       Date,
EndTime     Date,
LocationID      Number(10),
SeatAvailable   Number(3),
Status      Char(1));

ALTER TABLE Section
ADD Constraint Section_SectionID_PK PRIMARY KEY(SectionID);


insert into section values (1,1,'18977','r','21-Sep-2011','10-Dec-2011','1','89','o');


create table Location(
LocationId      Number(10),
Building        Varchar2(20),
Room        Varchar2(5),
Capacity        Number(5),
Satus       Char(1));

ALTER TABLE Location
ADD Constraint Location_LocationID_pk PRIMARY KEY (LocationID);

insert into Location values (1,'Clevleand Hall','cl209','35','o');
insert into Location values (2,'Toledo Circle','tc211','45','o');
insert into Location values (3,'Akron Square','as154','65','o');
insert into Location values (4,'Cincy Hall','ch100','45','o');
insert into Location values (5,'Springfield Dome','SD','35','o');
insert into Location values (6,'Dayton Dorm','dd225','25','o');
insert into Location values (7,'Columbus Hall','CB354','15','o');
insert into Location values (8,'Cleveland Hall','cl204','85','o');
insert into Location values (9,'Toledo Circle','tc103','75','o');
insert into Location values (10,'Akron Square','as201','46','o');
insert into Location values (11,'Cincy Hall','ch301','73','o');
insert into Location values (12,'Dayton Dorm','dd245','57','o');
insert into Location values (13,'Springfield Dome','SD','65','o');
insert into Location values (14,'Cleveland Hall','cl241','10','o');
insert into Location values (15,'Toledo Circle','tc211','27','o');
insert into Location values (16,'Akron Square','as311','28','o');
insert into Location values (17,'Cincy Hall','ch415','73','o');
insert into Location values (18,'Toledo Circle','tc111','67','o');
insert into Location values (19,'Springfield Dome','SD','69','o');
insert into Location values (20,'Dayton Dorm','dd211','45','o');

Alter Table Student
Add Constraint student_Zip_CK Check(Rtrim (Zip,'1234567890-') is null);

Alter Table Student
ADD Constraint Student_Status_CK Check(Status In('c','t'));

Alter Table Student
ADD Constraint Student_MI_CK2 Check(RTRIM(MI,'abcdefghijklmnopqrstuvwxyz')is Null);

Alter Table Student
Modify pin not Null;

Alter table Faculty
Add Constraint Faculty_Status_CK Check(Status In('f','a','i'));

Alter table Faculty
ADD Constraint Faculty_Rank_CK Check(Rank In  ('professor','doctor','instructor','assistant','tenure'));

Alter table Faculty
ADD Constraint Faculty_MI_CK2 Check(RTRIM(MI,'abcdefghijklmnopqrstuvwxyz')is Null);

Update Section Set Starttime = To_date('09-21-2011 6:00 PM', 'mm-dd-yyyy hh:mi pm');
Update Section Set Endtime = To_date('12-10-2011 9:50 PM', 'mm-dd-yyyy hh:mi pm');

alter table Section
Add Constraint StartTime_Status_CK Check (starttime < Endtime);

Alter Table Section
Add Constraint Section_StartTime_ck check (StartTime < EndTime);

 Alter Table Section
 ADD Constraint Section_CourseId_FK FOREIGN KEY (CourseID) References Course(CourseId);

 Alter Table Section
 ADD Constraint Section_LocationID_FK FOREIGN KEY (LocationID) References Location (LocationId);

 Alter Table Section
 ADD Constraint Section_Days_CK Check(RTRIM(Days,'mtwrfsu')IS Null);

 update section set seatavailable = '99';

 Alter Table Section
 ADD Constraint Section_SeatsAvailable_CK Check (SeatAvailable < 100);

 Alter Table Course
 Add Constraint Course_CreditHours_ck check(CreditHours < = 6.0);

 update location set capacity = '99'; 

 Alter Table Location
 Add Constraint Location_Capacity_CK Check(Capacity < 100);

 Create Table Registration (
 StudentID      Number(10),
 SectionID      Number(10),
 Constraint Registration_pk Primary key (studentId, Sectionid));

 Insert into registration values (1, 2);
 Insert into Registration values (2, 3);
 Insert into registration values (3, 4);
 Insert into registration values (4, 5);
 Insert into registration values (5, 6);
 Insert into registration values (6, 7);
 Insert into registration values (7, 8);
 Insert into registration values (8, 9);
 insert into registration values (9, 10);
 insert into registration values (10, 11);
 insert into registration values (9, 12);
 insert into registration values (8, 13);
 insert into registration values (7, 14);
 insert into registration values (6, 15);
 insert into registration values (5, 17);
 insert into registration values (4, 18);
 insert into registration values (3, 19);
 insert into registration values (2, 20);
 insert into registration values (1, 21);
 insert into registration values (2, 22);
 insert into registration values (3, 23);
 insert into registration values (4, 24);
 insert into registration values (5, 25);
 Insert into registration values (6, 24);
 insert into registration values (7, 23);
 insert into registration values (8, 22);
 insert into registration values (9, 21);
 insert into registration values (10, 20);
 insert into registration values (9, 19);
 insert into registration values (8, 17);



Create Table courseInstructor(
FacultyID       Number(10),
SectionID       Number(10),
Constraint CourseInstructor_pk Primary key (FacultyId, SectionID));




insert into courseInstructor values (1, 1);
insert into courseInstructor values (2, 2);
insert into courseInstructor values (3, 3);
insert into courseInstructor values (4, 4);
insert into courseInstructor values (5, 5);
insert into courseInstructor values (5, 6);
insert into courseInstructor values (4, 7);
insert into courseInstructor values (3, 8);
insert into courseInstructor values (2, 9);
insert into courseInstructor values (1, 10);
insert into courseInstructor values (5, 11);
insert into courseInstructor values (4, 12);
insert into courseInstructor values (3, 13);
insert into courseInstructor values (2, 14);
insert into courseInstructor values (1, 15);



 Create table grade(
 StudentID      Number(10),
 SectionID      Number(10),
 Grade      Varchar2(1),
 Constraint grade_pk Primary key (StudentID, SectionID));


 CREATE OR REPLACE TRIGGER TR_CreateGrade
 AFTER INSERT ON Registration
 FOR EACH ROW
 BEGIN
 INSERT INTO grade (SectionID,StudentID,Grade) 
 VALUES(:New.SectionID,:New.StudentID,NULL);
 END TR_createGrade;
 /

 CREATE OR REPLACE FORCE VIEW V_reg_student_course AS
 SELECT 
 Registration.StudentID, 
student.LastName, 
student.FirstName,
course.CourseName,
Registration.SectionID,
course.CreditHours,
section.Days,
TO_CHAR(StartTime, 'MM/DD/YYYY') AS StartDate, 
TO_CHAR(StartTime, 'HH:MI PM') AS StartTime, 
TO_CHAR(EndTime, 'MM/DD/YYYY') AS EndDate,
TO_CHAR(EndTime, 'HH:MI PM') AS EndTime,
location.Building,
location.Room
FROM registration, student, section, course, location
WHERE registration.StudentID = student.StudentID
AND registration.SectionID = section.SectionID
AND section.LocationID = location.LocationID
AND section.CourseID = course.CourseID;

CREATE OR REPLACE FORCE VIEW V_teacher_to_course AS
SELECT 
courseInstructor.FacultyID,
faculty.FirstName,
faculty.LastName,
courseInstructor.SectionID,
section.Days,
TO_CHAR(StartTime, 'MM/DD/YYYY') AS StartDate, 
TO_CHAR(StartTime, 'HH:MI PM') AS StartTime, 
TO_CHAR(EndTime, 'MM/DD/YYYY') AS EndDate,
TO_CHAR(EndTime, 'HH:MI PM') AS EndTime,
location.Building,
location.Room
FROM courseInstructor, faculty, section, course, location
WHERE courseInstructor.FacultyID = faculty.FacultyID
AND courseInstructor.SectionID = section.SectionID
AND section.LocationID = location.LocationID
AND section.CourseID = course.CourseID;

SELECT * FROM V_reg_student_course;

SELECT * FROM V_teacher_to_course;

1 个答案:

答案 0 :(得分:1)

我不知道这项练习需要多少细节,但这些是我看到的:

您正在混合CHAR和VARCHAR2类型,没有理由这样做。如果条目预计少于4000个字符,请让您的生活更轻松,并坚持使用VARCHAR2 许多人的姓名,城市和地址都超过20个字符。想想大,250个字符 Middle Initial是有问题的。不是每个人都有一个,如果他们这样做,他们可能希望他们的完整中间名拼写出来 地址信息应分为一系列单独的表格,但我认为这可能超出了您的任务范围 不是每个人都住在美国,想想城市和州/省的二级表的数字键 其中许多字段不应为空,例如课程编号,课程名称

现在,关于自动化功能的问题。我不确定你真正想要的是什么。注册课程的学生在数据库之外启动。工作人员将根据表格输入学生注册选项。或者学生会以电子方式提交,无论是某些前端应用程序都会启动交易。

例如,在您的前端,有人按“提交”。然后老式的方法是打开一个连接到数据库,添加一些参数,进行像

这样的过程调用

Add_student_to_course(student_id_in IN NUMBER,section_id_in IN NUMBER,registration_out OUT sys_refcursor)
在程序中,您检查学生是否存在,课程是否存在,课程是否有席位 根据验证过程的复杂性,有许多不同的方法来处理错误处理。如果一个注册可能违反多个业务规则,那么您希望返回复杂的信息。 (如果课程必须有座位,如果课程必须有老师,如果学生已经付清)。

所以,请像处理语句一样进行处理。当一切都很好时,在一个简单的应用程序中,sys_refcursor可能看起来像
从dual选择registration_no,error_number;
如果一切正常,error_number为0,如果没有返回错误代码。否则,注册码为0,错误代码指的是带有人类可读文本的错误表 (我知道这是一种简单的方法,但这是一种简化的练习)