新聞中心
oracle 寫一個觸發(fā)器,新手
創(chuàng)建兩個表:

蘇家屯ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
create table a
(stdid int,
stdname varchar2(10));
create table b
(stdid int,
stdname varchar2(10));
創(chuàng)建觸發(fā)器:
CREATE OR REPLACE TRIGGER tr_insert
after insert
ON a
FOR EACH ROW
BEGIN
INSERT INTO b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;
驗證,在a表中插入數(shù)據(jù):
insert into a values (1,'a');
commit;
驗證b表結(jié)果:
如果業(yè)務(wù)需要在插入前作判斷
就是說 ?當(dāng)且僅當(dāng) 表A插入的 stdid在表C中存在 ?也就是說
表A新插入的的 stdid in ? select stdid from C 時 才執(zhí)行下面插入表B的動作
創(chuàng)建個c表
create table c
(stdid int);
插入一條數(shù)據(jù):
insert into c values (1);
commit;
觸發(fā)器修改為:
CREATE OR REPLACE TRIGGER tr_insert
after insert
ON a
FOR EACH ROW
declare ?v_count int;
BEGIN
select count(*) into v_count from c where stdid =:new.stdid;
if v_count=0
then
INSERT INTO b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
end if;
END;
然后分別往a表中插入id=1和id=2的數(shù)據(jù),剩下的自己驗證吧, 不給你截圖了
oracle 創(chuàng)建觸發(fā)器問題
那個? PRAGMA AUTONOMOUS_TRANSACTION? 的代碼,? 單獨寫到一個存儲過程里面
然后觸發(fā)器里面? ,?? 調(diào)用存儲過程.
例如:
--?獲取當(dāng)前流水號的存儲過程.
CREATE?OR?REPLACE?PROCEDURE?GetNextSeqNo?(
p_result?IN?OUT?VARCHAR2
)?
AS
--?定義?“自治事務(wù)”
PRAGMA?AUTONOMOUS_TRANSACTION;
--?當(dāng)前流水.
v_seq?INT;
BEGIN
--?查詢.
SELECT?
current_seq?INTO?v_seq
FROM
test_month_seq
WHERE
year_month?=?TO_CHAR(sysdate,?'YYYYMM')
FOR?UPDATE;
--?更新.
UPDATE?
test_month_seq
SET
current_seq?=?current_seq?+?1
WHERE
year_month?=?TO_CHAR(sysdate,?'YYYYMM');
--?提交事務(wù).
COMMIT;
--?設(shè)置返回參數(shù).
p_result?:=?'P'?||?TO_CHAR(sysdate,?'YYYYMM')?||?TRIM(TO_CHAR(v_seq,?'000'));
END?GetNextSeqNo;
/
--?觸發(fā)器.
CREATE?OR?REPLACE?TRIGGER?tr_test_seqno_2
BEFORE?INSERT?ON?TEST_SEQNO
FOR?EACH?ROW
BEGIN
GetNextSeqNo(:new.SEQNO);
END;
/
如果你不需要? “自治事務(wù)”? 的
簡單刪除掉
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
和后面的? COMMIT;
Oracle創(chuàng)建觸發(fā)器
create or replace trigger qwx_tri after insert
on QWXMX for each row
begin
insert into FEIYONG (qxdh) values(:new.qxdh)
end;
你寫的不倫不類的,和sqlserver混淆了吧
Oracle觸發(fā)器,求大神詳細講解
1
創(chuàng)建table1:
CREATE
TABLE
table1
(
id
number(5),
name
char(20),
age
number(2),
);
2
創(chuàng)建table2,并給count字段初值為0
CREATE
TABLE
table2
(
count
number(5),
);
INSERT
INTO
table2
VALUES
(0);
3
插入觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_insert
AFTER
INSERT
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
4
刪除觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_delete
AFTER
DELETE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
5
更新觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_update
AFTER
UPDATE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
oracle建立觸發(fā)器 success with compilation error
1、oracle數(shù)據(jù)庫中的觸發(fā)器,insert into users values('05','trigger','普通','trigger','擁有一般權(quán)限');。
2、oracle數(shù)據(jù)庫中的觸發(fā)器(觸發(fā)器dml刪除三條記錄后)delete from users where u_type='其他';。
3、oracle數(shù)據(jù)庫中的觸發(fā)器(替代觸發(fā)器修改記錄信息)。
4、oracle數(shù)據(jù)庫中的觸發(fā)器(觸發(fā)器dml插入一條記錄,日志之前)。
5、oracle數(shù)據(jù)庫中的觸發(fā)器delete orders where o_id='200708021850';。
6、oracle數(shù)據(jù)庫中的觸發(fā)器(觸發(fā)器dml更新一條記錄之前)。
Oracle如何創(chuàng)建觸發(fā)器
一般在sqlplus或者其他第三方oracle工具中,按照語法及需求寫好代碼,直接執(zhí)行創(chuàng)建過程即可。
一般語法如下:
CREATE?[OR?REPLACE]?TRIGGER?trigger_name
{BEFORE?|?AFTER?}
{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}
[OR?{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}...]
ON?[schema.]table_name?|?[schema.]view_name?
[REFERENCING?{OLD?[AS]?old?|?NEW?[AS]?new|?PARENT?as?parent}]
[FOR?EACH?ROW?]
[WHEN?condition]
PL/SQL_BLOCK?|?CALL?procedure_name;
當(dāng)前名稱:oracle怎么建觸發(fā)器,oracle觸發(fā)器怎么用
網(wǎng)站URL:http://www.dlmjj.cn/article/hoigdp.html


咨詢
建站咨詢
