---https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8003.htm
drop user geovin;
drop user geovindu;
create user geovindu identified by ORCA;
--oracle用户创建及权限设置
create user geovin identified by password
default tablespace users
quota 10m on users
temporary tablespace temp
password expire;
--創建用戶才有權限創建表
create user geovindu identified by password
default tablespace users
quota 10m on users
temporary tablespace temp
password expire;
alter user GEOVINDU account lock;
--组用户权限
grant create session to GEOVINDU;
grant create session to GEOVIN;
select username,user_id,account_status,default_tablespace,temporary_tablespace from dba_users where default_tablespace='USERS' AND account_status='OPEN';
--查看用戶
select username,user_id,account_status,default_tablespace,temporary_tablespace from dba_users where default_tablespace='USERS';
select username,user_id,account_status,default_tablespace,temporary_tablespace from dba_users where username='GEOVINDU';
select tablespace_name,bytes,max_bytes from dba_ts_quotas;
--查询表是否存在
SELECT COUNT(*) FROM User_Tables t WHERE t.table_name = upper('BookKindList');
drop table TestDu; --删除表
select * from TestDu;
declare tableCount number;
begin
select count(1) into tableCount from user_tables t where t.table_name = upper('TestDu'); --从系统表中查询当表是否存在
if tableCount = 0 then --如果不存在,使用快速执行语句创建新表
execute immediate
'create table TestDu --创建测试表
(
TestID number not null,
TestName varchar2(20) not null
)';
end if;
end;
delete from BookKindList;
drop table BookKindList;
truncate table BookKindList;
--书分类目录kind
-- Geovin Du
create table geovindu.BookKindList
(
BookKindID INT PRIMARY KEY,
BookKindName nvarchar2(500) not null,
BookKindParent INT null,
BookKindCode varchar(100) ---編號
);
--序列创建
drop SEQUENCE BookKindList_SEQ;
CREATE SEQUENCE geovindu.BookKindList_SEQ
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
--自增长触发器
drop trigger BookKindList_ID_AUTO;
create or replace trigger geovindu.BookKindList_ID_AUTO
before insert on geovindu.BookKindList --BookKindList 是表名
for each row
declare
nextid number;
begin
IF :new.BookKindID IS NULL or :new.BookKindID=0 THEN --BookKindID是列名
select geovindu.BookKindList_SEQ.Nextval --BookKindList_SEQ正是刚才创建的
into nextid
from dual;
:new.BookKindID:=nextid;
end if;
end;
--对表的说明
comment on table geovindu.BookKindList is '书分类目录';
--对表中列的说明
comment on column geovindu.BookKindList.BookKindID is '目录ID';
comment on column geovindu.BookKindList.BookKindName is '目录名称';
comment on column geovindu.BookKindList.BookKindParent is '目录父ID';
comment on column geovindu.BookKindList.BookKindCode is '目录code';
declare
gg nvarchar2(500):='geovindu2';
dd nvarchar2(500):='d';
begin
select REPLACE(gg, chr(10), '') into dd from dual;
dbms_output.put_line(dd);
end;
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('六福书目录',0,'');
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('自然科学',1,'');
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('社会科学',1,'');
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('文学',3,'');
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('设计艺术',3,'');
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('小说',4,'');
insert into geovindu.BookKindList(BookKindName,BookKindParent,BookKindCode) values('诗词散曲',4,'');
select * from geovindu.BookKindList;
SELECT * FROM geovindu.BookKindList
ORDER BY BookKindID
OFFSET 5 ROWS FETCH NEXT 6 ROWS ONLY;
SELECT *
FROM geovindu.BookKindList
ORDER BY BookKindID
FETCH FIRST 5 ROWS ONLY;
---
SELECT *
FROM
(SELECT BookKindID,
BookKindName,
BookKindParent,
ROW_NUMBER() OVER (ORDER BY BookKindID) R
FROM geovindu.BookKindList
WHERE BookKindID >= 1
)
WHERE R >= 1
AND R <= 15;
declare
pageNumber int:=1;
pageSize int:=3;
begin
SELECT * FROM
(
SELECT a.*, rownum r__
FROM
(
SELECT * FROM geovindu.BookKindList WHERE BookKindName LIKE 'A%'
ORDER BY BookKindID DESC, BookKindName DESC
) a
WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
end;
select * from geovindu.BookKindList where BookKindName='文学';
update geovindu.BookKindList set BookKindName='计算机' where BookKindID=1;
--DISTINCT not in
declare
temvar nvarchar2(200):='哲学';
namevar int;
begin
select count(*) into namevar from geovindu.BookKindList T1 where exists (select BookKindName from geovindu.BookKindList T2 where T1.BookKindName = temvar ); --not exist除它自身之外的个数,exists自身的个数
dbms_output.put_line('value'||namevar);
if namevar<=0 then
begin
insert into geovindu.BookKindList(BookKindName,BookKindParent) values(temvar,0);
dbms_output.put_line('insert'||namevar);
end;
else
begin
select BookKindID into namevar from geovindu.BookKindList where BookKindName=temvar;
update geovindu.BookKindList set BookKindName=temvar where BookKindID=namevar;
dbms_output.put_line('update '||namevar);
end;
end if;
end;
declare
temvar nvarchar2(200):='文学';
namevar int;
begin
if exists (select BookKindName from geovindu.BookKindList T2 where T1.BookKindName = temvar ) then --不可以exists
dbms_output.put_line('update'||namevar);
else
dbms_output.put_line('value'||namevar);
end if;
end;
--书藉位置Place目录
drop table geovindu.BookPlaceList;
create table geovindu.BookPlaceList
(
BookPlaceID INT PRIMARY KEY, --NUMBER
BookPlaceName nvarchar2(500) not null,
BookPlaceCode varchar(100) null, --位置編碼
BookPlaceParent INT null
--BookPlaceKindId nvarchar(500) null --放置目录範圍ID
);
select * from geovindu.BookPlaceList;
----自动增长ID
--序列创建
drop SEQUENCE geovindu.BookPlaceList_SEQ;
CREATE SEQUENCE geovindu.BookPlaceList_SEQ
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
SELECT geovindu.BookPlaceList_SEQ.Currval FROM DUAL;
SELECT geovindu.BookPlaceList_SEQ.Nextval FROM DUAL;
--自增长触发器
drop TRIGGER geovindu.BookPlaceList_ID_AUTO;
CREATE OR REPLACE TRIGGER geovindu.BookPlaceList_ID_AUTO
BEFORE INSERT ON geovindu.BookPlaceList FOR EACH ROW
BEGIN
SELECT geovindu.BookPlaceList_SEQ.NEXTVAL INTO :NEW.BookPlaceID FROM DUAL;
END;
--自增长触发器
create or replace trigger geovindu.BookPlaceList_ID_AUTO
before insert on geovindu.BookPlaceList --BookPlaceList 是表名
for each row
declare
nextid number;
begin
IF :new.BookPlaceID IS NULL or :new.BookPlaceID=0 THEN --BookPlaceID是列名
select geovindu.BookPlaceList_SEQ.Nextval --BookPlaceList_SEQ正是刚才创建的
into nextid
from dual;
:new.BookPlaceID:=nextid;
end if;
end; -- BookPlaceList_ID_AUTO
--添加
insert into geovindu.BookPlaceList(BookPlaceName,BookPlaceCode,BookPlaceParent) values('图书位置目录','',0);
insert into geovindu.BookPlaceList(BookPlaceName,BookPlaceCode,BookPlaceParent) values('第一柜','',1);
insert into geovindu.BookPlaceList(BookPlaceName,BookPlaceCode,BookPlaceParent) values('第二柜','',1);
insert into geovindu.BookPlaceList(BookPlaceName,BookPlaceCode,BookPlaceParent) values('第三柜','',1);
select * from geovindu.BookPlaceList;
--
CREATE TABLE geovindu.YearNames (
YearNameID INT PRIMARY KEY,
YearName varchar(50) NOT NULL
);
--书系列Series或套名称(一本的0.无,有分上下本)
create table geovindu.BookSeriesList
(
BookSeriesID INT PRIMARY KEY, --INTEGERint
BookSeriesName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.BookSeriesList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.BookSeriesList_ID_AUTO
before insert on geovindu.BookSeriesList --表名
for each row
declare
nextid number;
begin
IF :new.BookSeriesID IS NULL or :new.BookSeriesID=0 THEN --ID是列名
select geovindu.BookSeriesList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.BookSeriesID:=nextid;
end if;
end;
--職位Position,
create table geovindu.PositionList
(
PositionID INT PRIMARY KEY,
PositionName nvarchar2(500) not null
);
--部門Department
create table geovindu.DepartmentList
(
DepartmentID INT PRIMARY KEY,
DepartmentName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.DepartmentList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.DepartmentList_ID_AUTO
before insert on geovindu.DepartmentList --表名
for each row
declare
nextid number;
begin
IF :new.DepartmentID IS NULL or :new.DepartmentID=0 THEN --ID是列名
select geovindu.DepartmentList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.DepartmentID:=nextid;
end if;
end;
--語种 Language
create table geovindu.LanguageList
(
LanguageID INT PRIMARY KEY,
LanguageName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.LanguageList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.LanguageList_ID_AUTO
before insert on geovindu.LanguageList --表名
for each row
declare
nextid number;
begin
IF :new.LanguageID IS NULL or :new.LanguageID=0 THEN --ID是列名
select geovindu.LanguageList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.LanguageID:=nextid;
end if;
end;
--出版社Press
create table geovindu.PressList
(
PressID INT PRIMARY KEY,
PressName nvarchar2(500) not null
--拼音索引
);
--序列创建
CREATE SEQUENCE geovindu.PressList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.PressList_ID_AUTO
before insert on geovindu.PressList --表名
for each row
declare
nextid number;
begin
IF :new.PressID IS NULL or :new.PressID=0 THEN --ID是列名
select geovindu.PressList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.PressID:=nextid;
end if;
end;
--判断表是否存在
SELECT COUNT(*) FROM geovindu.User_Tables t WHERE t.table_name = upper('AuthorList');
--作家Author
create table geovindu.AuthorList
(
AuthorID INT PRIMARY KEY,
AuthorName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.AuthorList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.AuthorList_ID_AUTO
before insert on geovindu.AuthorList --表名
for each row
declare
nextid number;
begin
IF :new.AuthorID IS NULL or :new.AuthorID=0 THEN --ID是列名
select geovindu.AuthorList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.AuthorID:=nextid;
end if;
end;
--BookStatus 书藉存在状态(1,在用,2,报废,3。转移)
create table geovindu.BookStatusList
(
BookStatusID INT PRIMARY KEY,
BookStatusName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.BookStatusList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.BookStatusList_ID_AUTO
before insert on geovindu.BookStatusList --表名
for each row
declare
nextid number;
begin
IF :new.BookStatusID IS NULL or :new.BookStatusID=0 THEN --ID是列名
select geovindu.BookStatusList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.BookStatusID:=nextid;
end if;
end;
--借阅状态:借出,续借,归还,预借
create table geovindu.LendStatusList
(
LendStatusID INT PRIMARY KEY,
LendStatusName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.LendStatusList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器
create or replace trigger geovindu.LendStatusList_ID_AUTO
before insert on geovindu.LendStatusList --表名
for each row
declare
nextid number;
begin
IF :new.LendStatusID IS NULL or :new.LendStatusID=0 THEN --ID是列名
select geovindu.LendStatusList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.LendStatusID:=nextid;
end if;
end;
drop table geovindu.DielectricList;
--图书介质(纸质,光盘,硬盘,网络)DielectricMaterials
create table geovindu.DielectricList
(
DielectricID INT PRIMARY KEY,
DielectriName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.DielectricList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.DielectricList_ID_AUTO
before insert on geovindu.DielectricList --表名
for each row
declare
nextid number;
begin
IF :new.DielectricID IS NULL or :new.DielectricID=0 THEN --ID是列名
select geovindu.DielectricList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.DielectricID:=nextid;
end if;
end;
--角色或權限類型Permission
create table geovindu.PermissionList
(
PermissionID INT PRIMARY KEY,
PermissionName nvarchar2(500) not null,
PermissionDesc NCLOB null
);
--序列创建
CREATE SEQUENCE geovindu.PermissionList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.PermissionList_ID_AUTO
before insert on geovindu.PermissionList --表名
for each row
declare
nextid number;
begin
IF :new.PermissionID IS NULL or :new.PermissionID=0 THEN --ID是列名
select geovindu.PermissionList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.PermissionID:=nextid;
end if;
end;
---菜单列表,用于控制权限
create table geovindu.PermissionMenu
(
PermissionMenuID INT PRIMARY KEY, --IDENTITY(1,1)
PermissionMenuName nvarchar2(500) not null,
PermissionMenuParent int null
);
--序列创建
CREATE SEQUENCE geovindu.PermissionMenu_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.PermissionMenu_ID_AUTO
before insert on geovindu.PermissionMenu --表名
for each row
declare
nextid number;
begin
IF :new.PermissionMenuID IS NULL or :new.PermissionMenuID=0 THEN --ID是列名
select geovindu.PermissionMenu_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.PermissionMenuID:=nextid;
end if;
end;
---找回密码问类型Question Answer
create table geovindu.QuestionTypeList
(
QuestionTypeID INT PRIMARY KEY,
QuestionTypeName nvarchar2(500) not null
);
--序列创建
CREATE SEQUENCE geovindu.QuestionTypeList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.QuestionTypeList_ID_AUTO
before insert on geovindu.QuestionTypeList --表名
for each row
declare
nextid number;
begin
IF :new.QuestionTypeID IS NULL or :new.QuestionTypeID=0 THEN --ID是列名
select geovindu.QuestionTypeList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.QuestionTypeID:=nextid;
end if;
end;
drop table geovindu.StaffReaderList;
--职员信息Reader staff member IC卡号(卡换了,卡号不一样),员工号,职位,部门,如果职员换岗或离职了,这个问题如何解决记录关联问题
create table geovindu.StaffReaderList
(
StaffReaderID INT PRIMARY KEY,
StaffReaderIC varchar(100) not null, --员工工牌IC号
StaffReaderNO varchar(20) not null, --员工编号
StaffReaderName nvarchar2(500) not null, --员工姓名
StaffReaderImage BFILE null,
StaffReaderDepartment int,
CONSTRAINT fky_StaffReaderDepartment
FOREIGN KEY(StaffReaderDepartment) REFERENCES geovindu.DepartmentList(DepartmentID),--员工所属部门(外键) ON DELETE SET NULL ON DELETE CASCADE
StaffReaderPosition int,
CONSTRAINT fky_StaffReaderPosition
FOREIGN KEY(StaffReaderPosition) REFERENCES geovindu.PositionList(PositionID), --职位Position(外键)
StaffReaderMobile varchar(50) null, --手机
StaffReaderTel varchar(200) null, --电话,
StaffReaderSkype varchar(50) null, ---
StaffReaderQQ varchar(50) null, --
StaffReaderEmail varchar(100) null, --电子邮件
StaffReaderIsJob char check (StaffReaderIsJob in ('N','Y')), --是否離職
StaffReaderOperatorID int,
CONSTRAINT fky_StaffReaderOperatorID
FOREIGN KEY(StaffReaderOperatorID) REFERENCES geovindu.BookAdministratorList(BookAdminID),--操作人员ID(添加记录的人员)(外键)
StaffReaderDatetime TIMESTAMP --
);
--序列创建
CREATE SEQUENCE geovindu.StaffReaderList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.StaffReaderList_ID_AUTO
before insert on geovindu.StaffReaderList --表名
for each row
declare
nextid number;
begin
IF :new.StaffReaderID IS NULL or :new.StaffReaderID=0 THEN --ID是列名
select geovindu.StaffReaderList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.StaffReaderID:=nextid;
end if;
end;
--权限类型列表,也是系统操作的窗口功能的详细列表BookAdminPermissTypeList
create table geovindu.BookAdminPermissTypeList
(
AdminPermissTypeID INT PRIMARY KEY,
AdminPermissParent int null, --父类型
AdminPermissTypeName nvarchar2(300) not null,
AdminPermissTypeDesc NCLOB null, --权限描述
AdminPermissFormName varchar(100) null --窗口名稱
);
--序列创建
CREATE SEQUENCE geovindu.AdminPermissTypeList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.AdminPermissTypeList_ID_AUTO
before insert on geovindu.BookAdminPermissTypeList --表名
for each row
declare
nextid number;
begin
IF :new.AdminPermissTypeID IS NULL or :new.AdminPermissTypeID=0 THEN --ID是列名
select geovindu.AdminPermissTypeList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.AdminPermissTypeID:=nextid;
end if;
end;
--權限公配錶 listview treeview check
create table geovindu.BookAdminPermissionrList
(
BookAdminPermissID INT PRIMARY KEY,
BookAdminPermissKey int,
CONSTRAINT fky_BookAdminPermiss
FOREIGN KEY(BookAdminPermissKey) REFERENCES geovindu.BookAdministratorList(BookAdminID) ON DELETE CASCADE, --管理员ID
BookAdminPermissDesc NCLOB null --权限分配ID
);
CREATE SEQUENCE geovindu.AdminPermissionrList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.AdminPermissionrList_ID_AUTO
before insert on geovindu.BookAdminPermissionrList --表名
for each row
declare
nextid number;
begin
IF :new.BookAdminPermissID IS NULL or :new.BookAdminPermissID=0 THEN --ID是列名
select geovindu.AdminPermissionrList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.BookAdminPermissID:=nextid;
end if;
end;
--还有一种方式是角色快速分配权限,先固定角色類型分配權限,再角色設置權限 PermissionList
create table geovindu.PermissionAssignmentList
(
PermissionAssignmentID INT PRIMARY KEY,
PermissionAssignmentKey int,
CONSTRAINT fky_PermissionAssignment
FOREIGN KEY(PermissionAssignmentKey) REFERENCES geovindu.PermissionList(PermissionID), --角色ID
PermissionAssignmentDesc NCLOB null --权限分配ID
);
CREATE SEQUENCE geovindu.PermissionAssignment_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.PermissionAssignment_ID_AUTO
before insert on geovindu.PermissionAssignmentList --表名
for each row
declare
nextid number;
begin
IF :new.PermissionAssignmentID IS NULL or :new.PermissionAssignmentID=0 THEN --ID是列名
select geovindu.PermissionAssignment_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.PermissionAssignmentID:=nextid;
end if;
end;
--权限管理 AuthorizationManagement
create table geovindu.BookAdministratorList
(
BookAdminID INT PRIMARY KEY,
BookAdminIC varchar(100) not null, --员工工牌IC号(换了卡,号会改变的)
BookAdminNO varchar(20) not null, --员工编号
BookAdminName nvarchar2(500) not null, --员工姓名
BookAdminEmail varchar(100) null, --电子邮件
BookAdminQQ varchar(50) null, --
BookAdminSkype varchar(50) null, --
BookAdminPassword nvarchar2(100) not null, --密码
BookAdminQuestion int,
CONSTRAINT fky_AdminQuestionID
FOREIGN KEY(BookAdminQuestion) REFERENCES geovindu.QuestionTypeList(QuestionTypeID), --找迴密碼類型(外鍵)
BookAdminAnswer nvarchar2(300) null, --找迴密碼答題
BookAdminIs char check (BookAdminIs in ('N','Y')), --是否在职
BookAdminPermission int,
CONSTRAINT fky_PermissionID
FOREIGN KEY (BookAdminPermission) REFERENCES geovindu.PermissionList(PermissionID), --权限范围(录入人员,盘点人员,申请书报销人员,批准人员,审核人员等)(角色或權限類型外鍵)
BookAdminDate TIMESTAMP
);
CREATE SEQUENCE geovindu.AdministratorList_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
--自增长触发器 (名称不能超过三十个字符)
create or replace trigger geovindu.BookAdministratorList_ID_AUTO
before insert on geovindu.BookAdministratorList --表名
for each row
declare
nextid number;
begin
IF :new.BookAdminID IS NULL or :new.BookAdminID=0 THEN --ID是列名
select geovindu.AdministratorList_SEQ.Nextval --_SEQ正是刚才创建的
into nextid
from dual;
:new.BookAdminID:=nextid;
end if;
end;
--2、创建主键
ALTER TABLE geovindu.BookAdministratorList
ADD CONSTRAINT pk_BookAdminQuestion
PRIMARY KEY (BookAdminQuestion) USING INDEX ;
--3、创建Unique约束
ALTER TABLE geovindu.BookAdministratorList
ADD CONSTRAINT uk_students_license
UNIQUE (state, license_no) USING INDEX ;
--4、创建Check约束
ALTER TABLE geovindu.BookAdministratorList ADD CONSTRAINT ck_students_st_lic
CHECK ((state IS NULL AND license_no IS NULL) OR
(state IS NOT NULL AND license_no is NOT NULL));
--5、创建外键约束
ALTER TABLE geovindu.BookAdministratorList
ADD CONSTRAINT fk_students_state
FOREIGN KEY (state) REFERENCES state_lookup (state);
--开启屏幕输出显示
-- SET SERVEROUTPUT ON;
--显示当前日期与时间
BEGIN
DBMS_OUTPUT.PUT_LINE('现在的日期时间:');
--显示信息不换行
DBMS_OUTPUT.PUT('今天是:');
--显示信息并换行
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'DAY'));
DBMS_OUTPUT.PUT('现在时间是: ');
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'));
END;