日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Oracle Class9. 數(shù)據(jù)庫(kù)觸發(fā)器和內(nèi)置程序包

系統(tǒng) 1963 0

------------------------2013-5-20------------------------
數(shù)據(jù)庫(kù)觸發(fā)器
內(nèi)置程序包

是pl/sql塊或存儲(chǔ)過(guò)程,dml操作時(shí)觸發(fā),隱式執(zhí)行,可能具有聲明部分和異常處理部分。

組成:語(yǔ)句,主體,限制。
類型:應(yīng)用程序觸發(fā)器,數(shù)據(jù)庫(kù)觸發(fā)器。

instead of觸發(fā)器。
視圖上而不是在表上定義的。?? !!
提供修改視圖的透明方法。
可以針對(duì)視圖編寫(xiě)insert,update及delete語(yǔ)句。
以不可見(jiàn)方式在后臺(tái)運(yùn)行。
執(zhí)行在觸發(fā)器主體中編寫(xiě)的操作。

啟用或禁用觸發(fā)器
alter trigger <Trigger_name> enable;
alter trigger <Trigger_name> disable;
刪除觸發(fā)器
drop trigger <Trigger_name>;
查看有關(guān)觸發(fā)器,使用下列數(shù)據(jù)字典視圖:
user_triggers
all_triggers
dba_triggers

內(nèi)置程序包
擴(kuò)展數(shù)據(jù)庫(kù)的功能
為pl/sql提供對(duì)sql功能的訪問(wèn)
用戶sys擁有所有程序包
是公共同義詞可以由任何用戶訪問(wèn)
用戶必須具有execute權(quán)限,才能訪問(wèn)過(guò)程和函數(shù)。

程序包名稱??描述
dbms_standard??提供語(yǔ)言工具
dbms_alert??支持?jǐn)?shù)據(jù)庫(kù)事件的異步通知
dbms_application_info?允許為跟蹤目的而注冊(cè)應(yīng)用程序
dbms_aq & dbms_aqadm?管理oracle advanced queuing選件
dbms_defer,
dbms_defer_sys,
dbms_defer_query?允許構(gòu)建和管理延遲的遠(yuǎn)程過(guò)程調(diào)用
dbms_ddl??某些ddl命令的pl/sql等效項(xiàng)
calendar??提供日歷維護(hù)功能
dbms_describe??描述存儲(chǔ)子程序
dbms_lob??操縱oracle lob
dbms_job??允許對(duì)pl/sql過(guò)程進(jìn)行調(diào)度
dbms_lock??用戶定義的鎖
dbms_output??在sql*plus或服務(wù)器管理器中提供屏幕輸出

dbms_output中的一些過(guò)程
-Enable
-Disable
-Put
-Put_line
-New_line
-Get_line
-Get_lines

dbms_lob
-append
-compare
-copy
-erase
-fileclose
-fileexists
-filegetname
-getlength


強(qiáng)制約束 類型
- 非空(not null)
- 主鍵(primary key)
- 外鍵(foreign key)
- 唯一(unique)
- 檢查(check)
- 缺省(default)

--創(chuàng)建表,并使用約束。
create table student2(
? no char(4) not null primary key,
? name varchar2(8) not null unique,
? sex char(2) default('女') check(sex='女' or sex='男'),
? age int default(18) check(age > 0 and age < 100),
? phone char(11) null
);

--添加數(shù)據(jù)
insert into t values(1);
insert into t (select a from t);
--查詢表
select * from t;


--語(yǔ)句級(jí)觸發(fā)器
set serveroutput on;

create or replace trigger t_ais
after insert on t
begin
? dbms_output.put_line('Insert Statement...');
end;

insert into t values(2);
insert into t values(3);

--行級(jí)
create or replace trigger t_air
after insert on t
for each row
begin
? dbms_output.put_line('Insert Row...');
end;


-- 多功能觸發(fā)器
create or replace trigger t_ardur
after insert or update or delete on t
for each row
begin
? case
? when inserting then
??? dbms_output.put_line('Insert is Coming@...' );
? when deleting then
??? dbms_output.put_line('Delete is Coming@...' );
? when updating then
??? dbms_output.put_line('Update is Coming@...' );
? end case;
end;

--insert into t values(7);
--update t set a = 8 where a=7;
delete from t where a = 8;
select * from t;???????????????? 分別在執(zhí)行添刪改查時(shí)觸發(fā)。

--創(chuàng)建表,添加數(shù)據(jù)。
create table users
(
id int,
name varchar2(12)
);

insert into users values(1,'ANiu');
insert into users values(2,'AZhu');

--判斷當(dāng)前用戶
create or replace trigger users_budr
before update or delete on users
for each row
begin
? if user = 'NEWLIFEYHJ' then
??? dbms_output.put_line('WelCome NewLifeYhj');
? else
??? dbms_output.put_line('No no no');
? end if;
end;

update users set name='AGou' where id=2;

加上判斷條件
when (to_char(sysdate,'Day') = '星期日')
insert into log values (user, sysdate,:old.name || ' 被修改為 ' || :new.name);? 觸發(fā)器主體對(duì)另外一個(gè)表進(jìn)行操作。

--創(chuàng)建日志表
create table log
(
username varchar2(24),
operdate date,
operations varchar2(500)
);


create or replace trigger users_budr
before delete or update of name on users
for each row
when (to_char(sysdate,'Day') = '星期一')
begin
? if user = 'NEWLIFEYHJ' then
??? dbms_output.put_line('WelCome NewLifeYhj');
? else
??? dbms_output.put_line('No no no');
? end if;
? insert into log values(user,sysdate,:old.name||'被修改為'||:new.name);
end;

update users set name='AZhu' where id=3;

--邏輯記錄
:New
:Old

ORA-04092: COMMIT 不能在觸發(fā)器中

set serveroutput on;??? --重新連接之后,打印信息出不來(lái),是這個(gè)需要重新設(shè)置。-- ##這就是奇怪為什么打印出不來(lái)的原因了##

update users set name='AZhu' where id=1;

select * from user_triggers;? --數(shù)據(jù)字典--


--觸發(fā)器實(shí)例應(yīng)用--進(jìn)銷存
--進(jìn)貨表
create table jh
(
hh char,?????? --貨號(hào)
sl number(3),? --數(shù)量
sj date??? --時(shí)間
);
--銷售表
create table xs
(
hh char,?????? --貨號(hào)
sl number(3),? --數(shù)量
sj date??? --時(shí)間
);

--庫(kù)存表
create table cc
(
hh char,?????? --貨號(hào)
sl number(3),? --數(shù)量
sj date??? --時(shí)間
);

--進(jìn)貨觸發(fā)器--
create or replace trigger triInsertJH
after insert
on jh
for each row
declare
lv_hc_num int;
begin
? select count(*) into lv_hc_num from cc where hh = :new.hh;
? if lv_hc_num > 0 then
??? update cc set sl = sl + :new.sl where? hh = :new.hh;
? else
??? insert into cc values (:new.hh, :new.sl,sysdate);
? end if;
end;


insert into jh values ('A', 120, sysdate);

--銷售觸發(fā)器--
create or replace trigger triInsertXS
after insert
on xs
for each row
declare
lv_hc_num int;
begin
? select sl into lv_hc_num from cc where hh = :new.hh;
? if lv_hc_num >=? :new.sl then
??? update cc set sl = sl - :new.sl where? hh = :new.hh;
? else
??? RAISE_APPLICATION_ERROR (-20001, '銷售量遠(yuǎn)大于現(xiàn)有庫(kù)存量!');
? end if;
end;

內(nèi)置程序包
取隨機(jī)數(shù):select dbms_random.random from dual;
????????? select dbms_random.string('q',4) from dual;?? -- 四位字符隨機(jī)數(shù)。

#dbms_lob#
#file xml 操作#? dbms_xmlquery? dbms_xmlgen

dbms_sql 動(dòng)態(tài)sql

--建立文件夾
create or replace directory wrox_dir as 'c:\temp2';

dbms_utility


##sql server##
sp_helptrigger
sp_helptext

?

Oracle Class9. 數(shù)據(jù)庫(kù)觸發(fā)器和內(nèi)置程序包


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 房产| 托克逊县| 德令哈市| 昭通市| 铅山县| 喀什市| 景宁| 长白| 永城市| 定陶县| 新昌县| 边坝县| 武隆县| 浮山县| 汕尾市| 普兰店市| 江达县| 库伦旗| 庆元县| 安塞县| 本溪| 栖霞市| 樟树市| 吉隆县| 昌江| 西吉县| 镶黄旗| 彭水| 泊头市| 永定县| 平度市| 驻马店市| 南丹县| 比如县| 汝阳县| 邳州市| 普洱| 屏南县| 墨竹工卡县| 双牌县| 桓台县|