在一般的数据存取操作过程中,如果要对一个主表和对应的子表进行插入操作,那么我们最常见的写法就是写两个存储过程或者SQL语句,一个负责主表数据插入,一个负责子表数据插入,然后在一个事务中实现主表和子表数据的插入。
现在遇到一个问题是,能否在一个存储过程中实现主表和子表数据的插入呢?那么就需要将一对多的数据作为存储过程的参数传入。这种情况下就需要使用表类型。下面以一个学生和班级的例子来说明:
先建立一个班级表和一个学生表,一个班级里面有多个学生。
CREATE TABLE CLASS
(
CLASSID NUMBER (38) PRIMARY KEY,
CLASSNAME VARCHAR2 (50 BYTE) NOT NULL
);
CREATE TABLE STUDENT
(
STUID NUMBER(38) PRIMARY KEY,
CLASSID NUMBER(38) NOT NULL,
STUNAME NVARCHAR2(50) NOT NULL,
STUGENDER CHAR(1 BYTE),
STUBIRTHDAY DATE,
DESCRIPTION NVARCHAR2(2000)
);
CREATE SEQUENCE CLASSID;
CREATE SEQUENCE STUDENTID;
(
CLASSID NUMBER (38) PRIMARY KEY,
CLASSNAME VARCHAR2 (50 BYTE) NOT NULL
);
CREATE TABLE STUDENT
(
STUID NUMBER(38) PRIMARY KEY,
CLASSID NUMBER(38) NOT NULL,
STUNAME NVARCHAR2(50) NOT NULL,
STUGENDER CHAR(1 BYTE),
STUBIRTHDAY DATE,
DESCRIPTION NVARCHAR2(2000)
);
CREATE SEQUENCE CLASSID;
CREATE SEQUENCE STUDENTID;