zoukankan      html  css  js  c++  java
  • Oracle11g: simple sql script examples

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

      

  • 相关阅读:
    HTTP协议
    2018年终总结
    HTML页面全屏/退出全屏
    HTML多图无缝循环翻页效果
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 错误解决
    Springboot 整合Activiti流程设计器 完成一个简单的请假流程
    阿里云ECS云服务器Linux Tomcat启动慢 访问网页转圈
    Apach Shiro MD5密码加密过程(明文生成密码过程)详细解析
    SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径
    Springboot 结合百度IORC实现自定义模板图片识别
  • 原文地址:https://www.cnblogs.com/geovindu/p/10024715.html
Copyright © 2011-2022 走看看