创建两个表:
苏家屯ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
create table a
(stdid int,
stdname varchar2(10));
create table b
(stdid int,
stdname varchar2(10));
创建触发器:
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表中插入数据:
insert into a values (1,'a');
commit;
验证b表结果:
如果业务需要在插入前作判断
就是说 当且仅当 表A插入的 stdid在表C中存在 也就是说
表A新插入的的 stdid in select stdid from C 时 才执行下面插入表B的动作
创建个c表
create table c
(stdid int);
插入一条数据:
insert into c values (1);
commit;
触发器修改为:
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的数据,剩下的自己验证吧, 不给你截图了
那个 PRAGMA AUTONOMOUS_TRANSACTION 的代码, 单独写到一个存储过程里面
然后触发器里面 , 调用存储过程.
例如:
-- 获取当前流水号的存储过程.
CREATE OR REPLACE PROCEDURE GetNextSeqNo (
p_result IN OUT VARCHAR2
)
AS
-- 定义 “自治事务”
PRAGMA AUTONOMOUS_TRANSACTION;
-- 当前流水.
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');
-- 提交事务.
COMMIT;
-- 设置返回参数.
p_result := 'P' || TO_CHAR(sysdate, 'YYYYMM') || TRIM(TO_CHAR(v_seq, '000'));
END GetNextSeqNo;
/
-- 触发器.
CREATE OR REPLACE TRIGGER tr_test_seqno_2
BEFORE INSERT ON TEST_SEQNO
FOR EACH ROW
BEGIN
GetNextSeqNo(:new.SEQNO);
END;
/
如果你不需要 “自治事务” 的
简单删除掉
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
和后面的 COMMIT;
create or replace trigger qwx_tri after insert
on QWXMX for each row
begin
insert into FEIYONG (qxdh) values(:new.qxdh)
end;
你写的不伦不类的,和sqlserver混淆了吧
1
创建table1:
CREATE
TABLE
table1
(
id
number(5),
name
char(20),
age
number(2),
);
2
创建table2,并给count字段初值为0
CREATE
TABLE
table2
(
count
number(5),
);
INSERT
INTO
table2
VALUES
(0);
3
插入触发器
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
删除触发器
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
更新触发器
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
1、oracle数据库中的触发器,insert into users values('05','trigger','普通','trigger','拥有一般权限');。
2、oracle数据库中的触发器(触发器dml删除三条记录后)delete from users where u_type='其他';。
3、oracle数据库中的触发器(替代触发器修改记录信息)。
4、oracle数据库中的触发器(触发器dml插入一条记录,日志之前)。
5、oracle数据库中的触发器delete orders where o_id='200708021850';。
6、oracle数据库中的触发器(触发器dml更新一条记录之前)。
一般在sqlplus或者其他第三方oracle工具中,按照语法及需求写好代码,直接执行创建过程即可。
一般语法如下:
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;