Oracle學習筆記

--"oracle.jdbc.OracleDriver";             
--"jdbc:oracle:thin:@localhost:1521:orcl";



select * from Dba_Tablespaces;                                              --查看所有表空間
select table_name from all_all_tables where tablespace_name='SPAC1';        --查找某個表空間下的表:注意,條件名稱一定要大寫
select tablespace_name from all_all_tables where table_name='ORCL_BOOK'     --查看某表所在表空間
select * from dba_users;                                                    --查找所有賬戶
--
select * from all_views;
select * from dba_views;
select * from user_views;
--
select * from all_synonyms;
select * from dba_synonyms;
select * from user_synonyms;
--
select * from all_indexes;
select * from dba_indexes;
select * from user_indexes;
--
select * from all_sequences;
select * from dba_sequences;
select * from user_sequences;
--
--創建表空間:
create tablespace spac1
       datafile 'c:\spac1.dbf'
       size 2m 
       autoextend on              --autoextend off  開啓或關閉自動增長
       next 1m                    --每次增長1m,最大增長到20m
       maxsize 20m;

--創建用戶
create user my_user1 identified by myuser1 default tablespace spac1;
grant connect,resource to my_user1; --revoke移除權限,Oracle中具體權限表************
--資源文件:創建資源文件的作用是爲XXX用戶創建限制,如登錄時輸入3次密碼錯誤,將鎖定該用戶等
create profile myuser1_profile limit
  sessions_per_user unlimited
  cpu_per_session unlimited
  cpu_per_call unlimited
  connect_time unlimited
  idle_time unlimited
  logical_reads_per_session unlimited
  logical_reads_per_call unlimited
  composite_limit unlimited
  private_sga unlimited
  failed_login_attempts 10
  password_life_time 180
  password_reuse_time unlimited
  password_reuse_max unlimited
  password_lock_time 1
  password_grace_time 7
  password_verify_function Null;
--
alter user my_user1 profile myuser1_profile --爲用戶配置所使用的資源文件
--

--創建表
--僞列:這是一個重要的對象,在Oracle數據庫的每一張表中存在着兩列隱藏列,列名分別是:rowid、rownum分別指示物理id和行id。通過select * from 表名;是查詢不到這兩列的內容的。
--僞列存在的作用是增大查詢效率和輔助完成特定需求,如分頁等
--select rowid,rownum,title from Orcl_Book;

create table Orcl_Book(
       BookClassID     number primary key,
       Title           varchar2(50) not null unique,
       Author          varchar2(50),
       ISBN            varchar2(50),
       CBFXX           varchar2(50),
       ZTXX            varchar2(50),
       DTZRZ           varchar2(50),
       ZRZ             varchar2(50),
       ZGTSFLFH        varchar2(50),
       KTTSFLFH        varchar2(50),
       LTZT            varchar2(50),
       FZX             varchar2(200),
       CBSJ            date,
       DJ              number(10,2),
       PCJE            number(10,2)
);
insert into Orcl_Book(Title) values('三國演義');
insert into Orcl_Book(Title) values('三國演義2');
select * from Orcl_Book;
--
create table Orcl_StorePlace(
       StoreID         number primary key,
       MC              varchar2(50),
       WZ              varchar2(200),
       FZR             varchar2(50),
       SM              varchar2(200)
);
--
create table Orcl_Store(
       BookID          number primary key,
       BookClassID     number,
       StoreID         number,
       SQH             varchar2(50) not null unique,
       TMH             varchar2(50),
       NJH             varchar2(50),
       ZT              varchar2(50) not null unique,
       RGSJ            date not null unique
);
alter table Orcl_Store add(
      Constraint Store_Book_fk foreign key(BookClassID) references Orcl_Book(BookClassID),
      Constraint Store_StorePlace_fk foreign key(StoreID) references Orcl_StorePlace(StoreID)
);
--
create table Orcl_Reader(
       ReaderId         number primary key,
       ZJH              varchar2(50),
       GH               varchar2(50),
       BZRQ             date,
       SXRQ             date,
       GQRQ             date,
       YJ               number(10,2),
       SXF              number(10,2),
       LJJS             number,
       RuleID           number,
       ZT               varchar2(50)
);
alter table Orcl_Reader add(
      Constraint Reader_Rule_fk foreign key(RuleID) references Orcl_Rule(RuleID)
);
--
create table Orcl_Rule(
       RuleID            number primary key,
       GZMC              varchar2(50),
       KJYTS             number,
       KJYGCDID          varchar2(50),
       KXJTS             number,
       KXJCS             number,
       KYYSJ             number       
);
--
create table Orcl_JYB(
       JYID              number primary key,
       ReaderID          number,
       BookID            number,
       JYSJ              date,
       DQSJ              date,
       GHRQ              date,
       ZT                varchar2(50),
       XJCS              number
);
alter table Orcl_JYB add(
      Constraint JYB_Reader_fk foreign key(ReaderID) references Orcl_Reader(ReaderID),
      Constraint JYB_Store_fk foreign key(BookID) references Orcl_Store(BookID)

);
--
create table Orcl_CFB(
       CFID              number primary key,
       ReaderID          number,
       BookID            number,
       CFYY              varchar2(50),
       CFJG              varchar2(50),
       FKJE              number(10,2),
       ZT                varchar2(50)
);
alter table Orcl_CFB add(
      Constraint CFB_Reader_fk foreign key(ReaderId) references Orcl_Reader(ReaderID),
      constraint CFB_Store_fk foreign key(BookID) references Orcl_Store(BookID)
);
--
--序列
--create sequence [方案] 序列名稱
--[increment by 整數]                   :指定序列增量
--[start with 整數]                     :起始值
--[maxvalue 整數 | nomaxvalue ]         :是否有最大值約束
--[minvalue 整數 | nominvalue ]         :是否有最小值約束
--[cycle 整數 | nocycle ]               :數字到達最大/最小值時序列是否重新開始
--cache                                 :緩存中保存的序列整數的數量

--使用序列:
--select my_sequence.currval from dual;查詢當前值     
--my_sequence.nextval  序列下一個值;
--eg:
select XL_BOOKCLASSID.currval from dual;
--
create sequence XL_BookClassID
increment by 1
start with 1
nomaxvalue
--
create sequence XL_StoreID
increment by 1
start with 1
--
create sequence XL_BookID
increment by 1
start with 1
--
create sequence XL_ReaderID
increment by 1
start with 1
--
create sequence XL_RuleID
increment by 1
start with 1
--
create sequence XL_JYID
increment by 1
start with 1
--
create sequence XL_CFID
increment by 1
start with 1
--


--存儲過程
--create or replace procedure 過程名稱(
--       sno in number default 20,      :輸入參數,可以通過default設置參數默認值
--       res out number                 :輸出參數
--                                      :(in out)還可以擁有雙向參數
--)
--is
--       聲明語句段;
--       [異常名1 exception;]
--begin
--       執行語句段;
--       ......
--       [raise 異常名1;]             :拋出異常
--exception
--       
--       when 異常名1 then
--            異常處理語句段1;
--end [過程名];

--說明:
--or replace:是可選項,如果同名的過程已經存在則覆蓋原有過程。
--過程是命名的PL/SQL代碼塊,用isas)關鍵字替代了declare作爲聲明語句段的開始。

--使用:
--要執行創建的過程,可以通過PL/SQL主程序或其他過程來調用;也可以在命令行工具中通過“execute 過程名”來調用執行。
--1.
--   begin
--     myproc;
--   end;
--2.
--   SQL>execute myproc;

--
create or replace procedure Ins_Orcl_Book (
       Title      in     varchar2,
       Author     in     varchar2,
       ISBN       in     varchar2,
       CBFXX      in     varchar2,
       ZTXX       in     varchar2,
       DTZRZ      in     varchar2,
       ZRZ        in     varchar2,
       ZGTSFLFH   in     varchar2,
       KTTSFLFH   in     varchar2,
       LTZT       in     varchar2,
       FZX        in     varchar2,
       CBSJ       in     date,
       DJ         in     number,
       PCJE       in     number
       -- 14
)
is 
begin
  insert into Orcl_Book(Title, Author, ISBN, CBFXX, ZTXX, DTZRZ, ZRZ, ZGTSFLFH, KTTSFLFH, LTZT, FZX, CBSJ, DJ,PCJE) values(Title, Author, ISBN, CBFXX, ZTXX, DTZRZ, ZRZ, ZGTSFLFH, KTTSFLFH, LTZT, FZX, CBSJ, DJ,PCJE);
end;
--


--函數
--create or replace function 函數名(參數名 參數類型,......)
--return 返回值類型
--is
--begin
--end [函數名];
--
create or replace function Sel_Orcl_Book_1(a number)      --:需要注意的是,函數必須有至少一個參數,即使不需要
return sys_refcursor                                      --:需要注意的是,函數必須有一個返回值
is 
   cur sys_refcursor;
begin
   open cur for select * from Orcl_Book;                  --此種寫法是固定的@************** 查詢時使用遊標 ******************@
   return cur;
end;


--執行函數
declare 
  cur sys_refcursor;
  rowone Orcl_Book%rowtype;
begin
  cur:=Sel_Orcl_Book_1(1);
  loop
    fetch cur into rowone;
    exit when cur%notfound;
    dbms_output.put_line(rowone.title);
  end loop;
  close cur;
end;
--
--Oracle中提供的常用函數:
--1.單行SQL字符函數
--:ABS(n)     返回n的絕對值
--:ACOS()      



--遊標
--:遊標換句話說就是查詢出的結果集,通過遊標我們更方便函數、存儲過程等的編寫,應用更方便。
--基本用法分4步
--1.定義遊標               CURSOR   cursor_name    IS   select語句;
--2.打開遊標               OPEN cursor_name;
--3.取值                   FETCH  cursor_name   INTO  variable[,variable]......;
--                              取值一般是個循環的過程,所以應用是一般需要結合循環語句一起使用。
--4.關閉遊標               CLOSE cursor_name;
--遊標的4個重要屬性:
--%FOUND       %NOTFOUND     %ROWCOUNT        %ISOPEN

--:遊標的2中應用
--:1 見函數 Sel_Orcl_Book_1(0);【上】:open cur_name for select語句:--
--:2
declare
     cursor cur is select * from Orcl_Book;
     rowone Orcl_Book%rowtype;
begin
  open cur;
  loop
    fetch cur into rowone;
    exit when cur%notfound;
    dbms_output.put_line(rowone.title);
  end loop;
  close cur;
end;  
--
--
--2種數據類型:
--1:Oracle提供的數據類型
        --字符數據類型:char(n)、varchar2(n)、long
        --數字數據類型:number(m,n)
        --日期數據類型:date
        --大對象數據類型:blob、clob、nclob
        --Bfile數據類型
        --其他:raw(n)、long row
        --返回某列的數據類型(xxx表示列名):xxx%type
        --返回某條記錄對象類型(即表的一行記錄爲一個對象)(xxx表示表名):xxx%rowtype
--2:自定義數據類型
        --type ty_name is record(
        --     stuID     students.stu_id%type,
        --     stuName   varchar2
        --);
        --使用:myStu ty_name;


--#-包:略!



--觸發器
--分三類:::before、after、instead of
--before    :表示在數據庫動作之前觸發器執行
--after     :表示在數據庫動作之後觸發器執行
--instead of:觸發器能將數據庫動作替換爲其他操作
--
--創建觸發器:
--create or replace trigger 觸發器名
--after|before|instead of
--[insert] [[or] update [of column_list]] | [[or] delete] on 表名/視圖名
--[for each row]                                                              :對錶的每一行觸發器執行一次,如果沒有這一行,表示對整個表執行一次
--[when (條件)]
--PL/SQL語句

--觸發器示例,爲[XXX]表實現自增長列
create or replace trigger TRI_XL_BookClassID
before insert on Orcl_Book
for each row
  when ( NEW.BookClassID is null )
    begin
      select XL_BookClassID.Nextval into :NEW.BookClassID from dual;
end;
--
create or replace trigger TRI_XL_StoreID
before insert on Orcl_StorePlace
for each row
  when ( NEW.StoreID is null )
    begin
      select XL_StoreID.Nextval into :NEW.StoreID from dual;
end;
--
create or replace trigger TRI_XL_BookID
before insert on Orcl_Store
for each row
  when ( NEW.BookID is nullbegin 
      select XL_BookID.Nextval into :NEW.BookID from dual;
end;
--
create or replace trigger TRI_XL_ReaderID
before insert on Orcl_Reader
for each row 
  when ( NEW.ReaderID is null ) 
    begin 
      select XL_ReaderID.Nextval into :NEW.ReaderID from dual;
end;
--
create or replace trigger TRI_XL_RuleID
before insert on Orcl_Rule
for each row
  when ( NEW.RuleID is null )
    begin 
      select XL_RuleID.Nextval into :NEW.RuleID from dual;
end;
--
create or replace trigger TRI_XL_JYID
before insert on Orcl_JYB
for each row 
  when ( NEW.JYID is null )
    begin 
      select XL_JYID.Nextval into :NEW.JYID from dual;
end;
--
create or replace trigger TRI_XL_CFID
before insert on Orcl_Cfb
for each row 
  when ( NEW.CFID is null )
    begin 
      select XL_CFID.Nextval into :NEW.CFID from dual;
end;
--










---其他存儲過程
create or replace procedure Ins_Orcl_StorePlace (
       MC         in  varchar2,
       WZ         in  varchar2,
       FZR        in  varchar2,
       SM         in  varchar2
--:4
)
is 
begin
  insert into Orcl_StorePlace(MC, WZ, FZR, SM) values(MC, WZ, FZR, SM);
end;
--
create or replace procedure Ins_Orcl_Store (
       BookClassID  in   number,
       StoreID      in   number,
       SQH          in   varchar2,
       TMH          in   varchar2,
       NJH          in   varchar2,
       ZT           in   varchar2,
       RGSJ         in   date
--:7
)
is 
begin
  insert into Orcl_Store(BookClassID, StoreID, SQH, TMH, NJH, ZT, RGSJ) values(BookClassID, StoreID, SQH, TMH, NJH, ZT, RGSJ);
end;
--
create or replace procedure Ins_Orcl_Reader(
       ZJH         in varchar2,
       GH          in varchar2,
       BZRQ        in date,
       SXRQ        in date,
       GQRQ        in date,
       YJ          in number,
       SXF         in number,
       LJJS        in number,
       RuleID      in number,
       ZT          in varchar2
)
is 
begin
  insert into Orcl_Reader(ZJH, GH, BZRQ, SXRQ, GQRQ, YJ, SXF, LJJS, RuleID, ZT) values(ZJH, GH, BZRQ, SXRQ, GQRQ, YJ, SXF, LJJS, RuleID, ZT);
end;
--
create or replace procedure Ins_Orcl_Rule(
       GZMC         in   varchar2,
       KJYTS        in   number,
       KJYGCDID     in   varchar2,
       KXJTS        in   number,
       KXJCS        in   number,
       KYYSJ        in   number       
)
is 
begin
  insert into Orcl_Rule(GZMC, KJYTS, Kjygcdid, Kxjts, Kxjcs, Kyysj) values(GZMC, KJYTS, Kjygcdid, Kxjts, Kxjcs, Kyysj);
end;
--
create or replace procedure Ins_Orcl_JYB(
       ReaderID          number,
       BookID            number,
       JYSJ              date,
       DQSJ              date,
       GHRQ              date,
       ZT                varchar2,
       XJCS              number
)
is 
begin
  insert into Orcl_Jyb(ReaderID, Bookid, Jysj, Dqsj, Ghrq, Zt, Xjcs) values(ReaderID, Bookid, Jysj, Dqsj, Ghrq, Zt, Xjcs);
end;

--
create or replace procedure Ins_Orcl_CFB(
       ReaderID          number,
       BookID            number,
       CFYY              varchar2,
       CFJG              varchar2,
       FKJE              number,
       ZT                varchar2
)
is 
begin
  insert into orcl_cfb(readerid, bookid, cfyy, cfjg, fkje, zt) values(readerid, bookid, cfyy, cfjg, fkje, zt);
end;

--
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章