[獨孤九劍]Oracle知識點梳理(一)表空間、用戶html
[獨孤九劍]Oracle知識點梳理(四)SQL語句之DML和DDL安全
[獨孤九劍]Oracle知識點梳理(五)數據庫經常使用對象之Table、View函數
[獨孤九劍]Oracle知識點梳理(六)數據庫經常使用對象之Procedure、function、Sequence測試
[獨孤九劍]Oracle知識點梳理(七)數據庫經常使用對象之Cursorspa
[獨孤九劍]Oracle知識點梳理(八)常見Exception code
[獨孤九劍]Oracle知識點梳理(九)數據庫經常使用對象之packagehtm
[獨孤九劍]Oracle知識點梳理(十)%type與%rowtype及經常使用函數對象
1 create or replace procedure proc_GetPerson(argName in varchar2,argMsg out varchar2,argTable out pkg.RefCur)
--參數,不須要定義長度 2 as 3 vName varchar2(64);-- 定義變量,要設置長度 4 begin 5 vName:=argName; --賦值,每條語句要以分號結束 6 open pke.RefCur is select * from person where name like vName||'%';--將查詢結果記錄到返回遊標中 7 --固然,還能夠進行其餘複雜的判斷,轉換等操做 8 argMsg:='正常'; 9 commit; 10 11 Exception 12 when others then argMsg='異常'; 13 rollback; --若是以前執行的是事務性的語句,有必要保證數據安全 14 end proc_GetPerson;
drop procedure pro_GetPerson;
1 create or replace function fun_GetPersonName(argName in varchar2,argGender in varchar2) return varchar2 2 as 3 Result varchar2(64); --定義變量 4 begin 5 select name into Result from person where name =argName and gender=argGender and rownum=1; 6 return Result;--返回值 8 end fun_GetPersonName;
1 create or replace function fun_GetPersonName(argName in varchar2,argGender out varchar2) return varchar2 2 as 3 Result varchar2(64); --定義變量 4 begin 5 select name,gender into Result,argGender from person where name =argName and rownum=1; 6 return Result;--返回值 7 end fun_GetPersonName;
drop function fun_GetPersonName;
在Oracle中sequence就是序號,每次取的時候它會自動增長;sequence與表沒有關係。
首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權限。
1 create sequence seqPersonID 2 increment by 1 --每次加1 3 start with 1 --序列從1開始計數 4 nomaxvalue --不設置最大值 5 nocycle --一致累加,不循環 6 cache 10; 設置緩存cache個序列,若是系統down掉了,或者其餘狀況會致使序列不連續, 7 --nocache; --不是最緩存
currVal:返回sequence的當前值
nextVal:返回sequence下一個值
1 select seqPersonID.CurrVal from dual; --獲得序列的當前值,必須在調用過NextVal以後才能使用,不然報錯 2 select seqPersonID.NextVal from dual; --獲得序列的下一個值,若是是第一次使用,則返回建立時設置的初始值
在Sql語句中可使用sequence的地方:
如在插入語句中
insert into person(id,name)values(seqPersonID.Nextval,'sequence 插入測試');
能夠修改出start以外的全部sequence參數,若是想修改start的值,必須先drop 再從新建立
alter sequence seqPersonID maxValue 99999999;
drop sequence seqPersonID;