oracle13 觸發器 變數

2021-09-07 02:55:40 字數 2983 閱讀 1096

觸發器 

觸發器是指隱含的執行的儲存過程。當定義觸發器時,必須要指定觸發的事件和觸發的操作,常用的觸發事件包括insert,update,delete語句,而觸發操作實際就是乙個pl/sql塊。可以使用create trigger來建立觸發器。

特別說明:

我們會在後面詳細為大家介紹觸發器的使用,因為觸發器是非常有用的,可維護資料庫的安全和一致性。

定義並使用變數,復合型別

定義並使用變數

在編寫pl/sql程式時,可以定義變數和常量;在pl/sql程式中包括有:

1.標量型別(scalar)

2.復合型別(composite)

3.參照型別(reference)

4.lob(large object

) 標量(scalar)——常用型別

在編寫pl/sql塊時,如果要使用變數,需在定義部分定義變數。pl/sql中定義變數和常量的語法如下:

identifier [constant] datatype [not

null] [:=| default

expr]

identifier : 名稱

constant :指定常量。需要指定它的初始值,且其值是不能改變的

datatype :資料型別

not

null

:指定變數值不能為null

:=給變數或是常量指定初始值

default

用於指定初始值

expr :指定初始值的pl/sql表示式,可以是文字值、其它變數、函式等。

標量定義的案例

1.定義乙個變長字串

v_ename varchar2(

10);

2.定義乙個小數,範圍 -9999.99~9999.99

v_sal number(

6,2);

3.定義乙個小數並給乙個初始值為5.4 :=是pl/sql的賦值號

v_sal2 number(

6,2):=5.4; 4

.定義乙個日期型別的資料

v_hiredate date;

5.定義乙個布林變數,不能為空,初始值為false

v_valid boolean not

null

default

false

; 標量(scalar)——使用標量

在定義好變數後,就可以使用這些變數。這裡需要說明的是pl/sql塊為變數賦值不同於其它的程式語言,需要在等號前面加冒號(:=)

下面以輸入員工號,顯示雇員姓名、工資、個人所得稅(稅率為0.

03)為例。說明變數的使用,看看如何編寫。

sql**

1.declare  

2.  c_tax_rate number(3,2):=0.03

;   

3.  --使用者名稱   

4.  v_ename varchar2(5

);   

5.  v_sal number(7,2

);   

6.  v_tax_sal number(7,2

);   

7.begin  

8.--執行   

9.    select ename,sal into v_ename,v_sal from emp where empno=&no;   

10.--計算所得稅   

11.    v_tax_sal := v_sal*c_tax_rate;   

12.--輸出   

13.    dbms_output.put_line('

姓名是:

'||v_ename||'

工資:'||v_sal||'

交稅:'||v_tax_sal);   

14.end;   

15./

標量(scalar)——使用%type型別

對於上面的pl/sql塊有乙個問題:

就是如果員工的姓名超過了5個字元的話,就會有錯誤,為了降低pl/sql程式的維護工作量,可以使用%type屬性定義變數,這樣它會按照資料庫列來確定你定義的變數的型別和長度。

我們看看這個怎麼使用:

識別符號名 表名.列名%type;

比如上例的v_ename,這樣定義: v_ename emp.ename%type; v_ename這個變數的型別和emp表的ename欄位型別一樣。

復合變數(composite)

標量只能存放單個資料,用於存放多個值的變數。主要包括這幾種: 

1.pl/sql記錄型別 

2.pl/sql表型別 

3.巢狀表型別 

4.varray型別 

復合型別——pl/sql記錄

類似於高階語言中的結構體,需要注意的是,當引用pl/sql記錄成員時,必須要加記錄變數作為字首(記錄變數.記錄成員)如下:

sql** 

declare  

--定義乙個pl/sql記錄型別emp_record_type,型別包含3個資料name,salary,title。說白了,就是乙個型別可以存放3個資料,主要是為了好管理   

type emp_record_type is record(   

name   emp.ename%type,   

salary emp.sal%type,   

title  emp.job%type);   

--定義了乙個sp_record變數,這個變數的型別是emp_record_type   

sp_record emp_record_type;   

begin  

select ename, sal, job into sp_record from emp where empno = 7788;   

dbms_output.put_line ('員工名:' || sp_record.name);   

end; 

13oracle之觸發器trigger

資料庫觸發器是乙個與表相關聯的 儲存的pl sql程式。每當乙個特定的資料操作語句 insert,update,delete 在指定的表上發出時,oracle自動地執行觸發器中定義的語句序列。解釋 換句話說 觸發器就是在執行某個操作 增刪改 的時候觸發乙個動作 一段程式 建立觸發器語法 create...

ORACLE觸發器 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...

Oracle觸發器和new old特殊變數

new 為乙個引用最新的列值 old 為乙個引用以前的列值 這兩個變數只有在使用了關鍵字 for each row 時才存在.且update語句兩個都有,而insert只有 new delect 只有 old 系統中的觸發器例項 create or replace trigger jbpm.tib ...