---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;