1,sequence的使用
問題:在mssql中,我們可以通過設定自增長來作為主鍵,但是oracle裡面沒有這個
解決方案:使用sequence來實現,具體步驟如下
(1)首先建立乙個序列(就是每次查詢會自動增加值的絕不重複的物件,比如每次加1或每次加10)。語法:
create sequence 序列名
[increment by n] --每次加幾
[start with n] --序列從幾開始
--最小值、最大值的限制
比如create sequence s_test start with 1 increment by 1; --就是建立了額乙個從1開始每次加1的序列。
訪問序列時,用 序列名稱.nextval的語法。
比如對於上表,如果想要id欄位實現自增。則在每次插入記錄時,使用下面類似的語法(前提是表和序列已經建好)。
insert into test values (s_test.nextval,'張三');
當然,你也可以自動一些,對錶的插入操作,建立乙個觸發器,每當有資料插入時,觸發器自動修改id值為序列的新值,這樣就完全實現自增id功能了。不過其實也沒有這個必要。因為觸發器如果建多了,有時會比較混亂,不易管理。
2,pl/sql 儲存過程
儲存過程相當於乙個方法塊,或者函式塊,用來完成特定功能,並且是高頻使用。具體的步驟包括
pl/sql塊由三個部分構成: 定義部分,執行部分,例外處理部分。
如下所示:
declare/*定義部分——定義常量、變數、游標、例外、複雜資料型別*/
begin /*執行部分——要執行的pl/sql語句和sql語句*/
exception /*例外處理部分——處理執行的各種錯誤*/
end;
定義部分是從declare開始的,該部分是可選的;
執行部分是從begin開始的,該部分是必須的;
例外處理部分是從exception開始的,該部分是可選的
帶引數的如下
1oracle建立儲存過程create
orreplace
procedure stu_update_price(v_id number,v_price number) is23
begin
4update student set stu_price = v_price where stu_id=
v_id;
5 dbms_output.put_line(v_id||
'new price is '||
v_price);
6end;7
/
3,函式
函式用於返回特定的資料,當建立函式時,在函式頭部必須包含return子句。
而在函式體內必須包含return語句返回的資料。我們可以使用createfunction
來建立函式
1建立函式並呼叫函式create
function get_stu_price(v_stuid number) return
number
is2 stu_id_value number(5);3
begin
4select stu_price into stu_id_value from student where stu_id =
v_stuid;
5return
stu_id_value;
6end;7
/8910 sql>
var income number
11 sql> call get_stu_price(1001) into
:income;
1213
呼叫完成。
1415 sql>
income
1617
income
18--
--------
19100
Oracle Oracle常用指令
隨手記錄下有時會用到,但不是很頻繁,每次都要搜尋的那些命令 1.斷開使用者連線 刪除使用者的時候提示有在連線程序可用 1.查到使用者程序 select sid,serial from v session where username username 2.殺掉程序 alter system kill...
Oracle Oracle程序簡介
為什麼要有後台程序 為什麼要每個例項要有個記憶體結構?就是為了提高資料讀寫效率而設定的乙個大型的記憶體區域,否則豈不是要實時與磁碟互動?為什麼要有後台程序 資料最終還是要存到磁碟上,所以需要有不同的程序將不同記憶體片段按某個條件批量寫進磁碟 如資料寫程序 ora dbw0 日誌寫程序 ora lgw...
ORACLE ORACLE時區總結
設定會話時區 alter session set time zone 10 00 設定會話時間格式 alter session set nls date format yyyy mm dd hh24 mi ss select dbtimezone,sessiontimezone,current da...