(1)创建三个表:Student(S#, Sname, age), Course(C#, cname, credit), SC(s#, c#, score),其中SC的S#和C#都是外键,分别引用Student表的S#和Course表的C#。请首先在各自表中插入若干条记录,然后用存储过程实现修改指定学生的学号。
(2)创建两个表:系表:Dept(D#, Dname, S_Count) ,其中S_count是每个系的学生人数;学生表:Stu(S#, Sname, age, D#) 其中D#是引用Dept(D#)的外键。请用触发器实现S_count和学生表中实际人数的一致性。
开发工具:PL/SQL Developer
1.建表:
Student(S#, Sname, age)表,对应SQL语句如下:
create table STUDENT
(
S# VARCHAR2(10) not null,
Sname VARCHAR2(10),
age NUMBER,
constraint S# primary key (S#)
);
Course(C#, cname, credit)表,对应SQL语句如下:
create table COURSE
(
C# VARCHAR2(10) not null,
cname VARCHAR2(20),
credit NUMBER,
constraint C# primary key (C#)
);
SC(s#, c#, score)表,对应SQL语句如下:
create table SC
(
S# VARCHAR2(5) not null,
C# VARCHAR2(5) not null,
score NUMBER not null,
constraint SC_PK primary key (S#, C#),
constraint C#_FK_COURSE foreign key (C#)
references COURSE (C#) on delete cascade,
constraint S#_FK_STUDENT foreign key (S#)
references STUDENT (S#) on delete cascade
);
3.插入数据:
这里由于需要一次性插入多条数据,而MySQL的多行插入语法INSERT INTO 某表 VALUES(各个值),VALUES(各个值);这样会报错,因为ORACLE不支持这种写法;如果多个INSERT INTO VALUES(各个值);这样以“;”隔开一同执行也是不行的,ORACLE也是不支持。
但是在这里我们可以利用ORACLE 9i版本以后的语法,即”INSERT ALL INTO a表 VALUES(各个值) INTO a表 VALUES (其它值) INTO a表 VALUES(其它值) ….再跟一个SELECT 语句“。后边跟的SELECT 语句我们可以从虚拟表里查如 SELECT 1 FROM DUAL。
Student(S#, Sname, age)表,对应SQL语句如下:
insert all into student(s#,sname,age) values ('001','小A',