Oracle PL SQL高階特性

2022-08-26 22:51:24 字數 3326 閱讀 8799

定義:pl/sql該語言只針對oracle,是sql過程語言的擴充套件,它將sql資料庫語言與乙個過程程式語言結合在一起,此程式語言基於稱為塊的單元,乙個塊包含sql和pl/sql語句.

觸發器:是指存放在資料庫中,並被隱含執行的過程,體現了資料完整約束.oracle不僅支援dml(操作語言)觸發器,也允許基於系統事件和ddl(資料定義語言)操作建立觸發器.

觸發器簡介:觸發器由觸發事件,觸發條件和觸發操作三部分組成.

觸發事件:是指引觸發器觸發的sql語句,資料庫事件或使用者事件,

觸發條件(觸發時機):根據邏輯處理而進行觸發程式集的一系列的條件.

觸發操作:是指包含sql語句和其它執行**的pl/sql塊,觸發器大大小不能超過32k.

dml觸發器:建立dml觸發器時,需要指定觸發器時機,觸發事件,表明,觸發型別,觸發條件以及觸發操作.

觸發時機:用於指定觸發器的觸發時間(before表示執行dml操作之前觸發,after表示執行dml操作之後觸發).

觸發事件:指定導致觸發器執行的dml操作(insert ,updaet,delete).

表名:指定dml操作所對應的表.

觸發型別:(行級別,語句級別和單元格級別)

dml觸發器觸發順序:在單行執行dml操作時先執行表的before語句觸發器,再執行before行觸發器.

語法:create or replace trigger t_name   

on --單元格級別

--行級別(row表中有old和row表)   

begin     

邏輯處理......

end;

例如:  建立表   

create table emp_log  

id number not null,  

mydate date not null,   

mark varchar2(30)  

建立序列  

create sequence seq_log  

start with 1   

nomaxvalue

increment by 1    

建立觸發器   

create or replace trigger t_emp_log  

after insert on scott.emp for each row  

begin             

insert into emp_log values(seq_log.nextval,sysdate,'這是插入操作' || :new.empno);     

dbms_output.put_line(:new.empno);   

end;

管理觸發器:

顯示觸發器資訊:select * from user_tigger where table _name='emp'

禁用觸發器:alter trigger tr_check_sal disable;

啟用觸發器:alter trigger tr_check_sal enable;

禁用或啟用表的所有觸發器:alter table emp disable all trigers;

alter table emp enable all triggers;

重新編譯觸發器:alter trigger tr_check_sal compile;

刪除觸發器:drop trigger tr_check_sal(觸發器名稱)

程式包:用於邏輯組合相關的pl/sql型別,可以簡化應用設計,提高應用效能,還可以實現資訊的隱蔽,子程式的過載功能.

內建程式包:擴充套件資料庫的功能,為pl/sql提供sql功能的訪問.一般具有sys許可權的高階管理人員使用.

常用的程式包:  

dbms_alter:用於支援資料庫事件的非同步通知.

dbms_standard:提供語言工具.    

dbms_ddl:某些ddl命令的pl/sql等效項.

calendar:提供日曆維護功能.   

dbms_lob:操作oralce的lob資料.  

dbms_output:在sql*plus或服務管理器中提供螢幕輸出.   

dbms_rowid:允許從rowid獲得資訊,相當與rowno分頁.

dbms_session:alter session的pl/sql等效項.   

dbms_sql:動態pl/sql和sql.

dbms_output程式包允許顯示pl/sql塊和子程式的輸出結果.         

put:用於將乙個資訊儲存在緩衝區中.        

put line:用於將乙個資訊儲存在緩衝區中,後接乙個換行結束標記.

new line:沒有引數,它用於向緩衝區新增換行符,換行符充當行結束標記.

dbms_lob程式包包含處理大型物件的過程和函式.在oracle中lob分為以下幾種型別.

blob:二進位製大物件,clob:字元大物件和bfile外部儲存的二進位制檔案.

常用的函式和過程:

getlength:此函式返回指定的blob,clob或bfile的長度.

instr:此函式從lob資料中查詢字串.

read:此過程從lob資料中讀取指定長度的資料到緩衝區.

substr:此函式從lob資料中取字串.

write:此過程用於將指定數量的資料寫入lob.

建立包:包由包頭和包體兩部分組成,包頭用於預定函式,儲存過程,沒有實現,包體用於具體實現.

定義包頭:

例如:create or replace package pack_test

asfunction delete_emp2 return number;--函式

procedure delete_emp(v_no number);--儲存過程

end;

定義包體:

例如:create or replace package body pack_test      

as      

procedure delete_emp(v_no number)    

as    

begin   

delete emp where empno = v_no;  

end delete_emp;

function delete_emp2 return number  

as  

begin    

return 1;

end delete_emp2;       

end pack_test;  

呼叫程式包:declare

begin

pack_test.delete_emp(2222);

end;

oracle PL SQL高階特性

觸發器 存放在資料庫中,並被隱含執行的儲存過程。由觸發事件,觸發條件,觸發操作組成。dml觸發器 指定觸發器時機 before or after 觸發事件 insert delete,update 表名,觸發型別,觸發條件,觸發操作 語句觸發器 create or replace trigger t...

Python高階特性

l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...

高階OOP特性

注意 高階oop特性只在php5及以上版本支援 抽象類 命名空間需要5.3及以上 在php5中,將所有對物件都看作引用,而不是值。那麼如何建立物件的副本呢?答案就是轉殖物件。語法 destinationobject clone targetobject 可以在乙個類裡面定義乙個 clone 方法來調...