CREATE OR REPLACE TRIGGER trg_cost
创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为义安企业提供专业的成都网站建设、成都网站设计,义安网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
AFTER INSERT ON cost for each row
begin
update cost a
set a.oper_date =sysdate
where a.oper_date =:new.NEW.OPER_DATE
-- 其他条件
...;
END ;
希望能够帮到你。谢谢!
create or replace trigger emergency
after
insert or update of p_time
on tableA
for each row
Begin
if p_code = '9999' then
update tableB set p_time = :new.p_time where id = :new.id
end if;
end;
提示已经讲得清楚: 表TEST.TB_CLEARING发生了变化, 触发器/函数不能读它.
在使用oracle行级(for earch row设定)触发器时要注意:
1.触发器不可以执行COMMIT、ROLLBACK或SAVEPOINT语句,而且不可以调用执行这些语句之一的函数或过程。
2.触发器不可以声明long或LONG RAW变量。
3.触发器不可以在定义它的表上执行DML操作(行级触发器)
你在该触发器中要读取触发器器所在的表的数据(数据DML操作), 这是不允许的.
你将行级触发改成表级触发, 即去掉for each fow试试. 反正在你的语句中也没有使用到NEW, OLD这两个行级触发器新值, 旧值记录.
另外, 粗看你的代码, 似乎更新没有针对性(没有针对内容有变更的记录对tb_budget进行更新), 这样做效率不高, 应该考虑优化你的更新逻辑和代码.
在Order表上建立一个触发器,拿得表只允许 ZhangSan修改,即使System管理员也不能修改,怎么建立触发器 ?
CREATE OR REPLACE TRIGGER BeforeAllOrder
BEFORE INSERT OR UPDATE OR DELETE ON Order
FOR EACH ROW
BEGIN
IF USER != 'ZhangSan' THEN
RAISE_APPLICATION_ERROR(-20000, '只有 ZhangSan 可以修改这个表!');
END IF;
END;
在Students表上插入数据,学号中不能含有-?!等等这种字符?
这种不需要触发器,直接建立约束就可以了。
例如:
ALTER TABLE Students
ADD CONSTRAINT Students_No_check
CHECK ( INSTR(学号, '-') = 0
AND INSTR(学号, '?') = 0
AND INSTR(学号, '!') = 0
)
参考资料:
Oracle 触发器
Oracle异常处理
create or replace trigger jilu_date_end
before update of shenpi on jilu
for each row
declare
etime date;
begin
select sysdate into etime from dual;
//这里用update语句进行那个时间更新即可
end jilu_date_end;
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款