定義: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 方法來調...