你在update了emp表之后,触发了触发器,然后在触发器的程序块中,又再次update了emp_back表,所以这两个表就产生了联系
create or replace trigger no_time_newdate before insert on unifier_uxqa0401
begin
if to_char(sysdate,'day') in('saturday','sunday') or to_number(to_char(sysdate,'hh24')) not between 9 and 18
--禁止insert
raise_application_error(-20001,'非工作时间禁止写入');
end if;
end ;
我是这样写的,亲测有效
to_char(sysdate,'day')是输出的中文星期一,星期二,你触发的却是saturday'
,
'sunday'
,
'friday,应该改为星期一,星期日,星期五
if :new.sal>6000;
dbms_output.put_line('涨工资超过6000');
你的in兩邊沒有隔開吧
有开启打印功能吗?set serveroutput on
你可以对触发器做一下操作
--禁用某个表上的所有触发器
ALTER TABLE 表 DISABLE TRIGGER all
--启用某个表上的所有触发器
ALTER TABLE 表 enable TRIGGER all
--禁用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE DISABLE TRIGGER all'
没怎么看明白你的问题,你的触发器是在插入操作之前,然后你查询了一个当天的日期,我按照你的试了一下没有问题,是不是你没有打开输出开关?
使用show error查看下
不知道哎
create table emp1 select * from emp where 1=2; create or replace trigger tri_operation_dml after insert or delete or update on emp for each row begin insert into emp1(ename) select case when :old.ename is null then :new.ename else :old.ename end from dual; end;
两个括号,前面一个括号里是被插表的列名,后一个括号放的是要插入的数据,两者在顺序上要对应一致。
触发器,嗯哼!
set serveroutput on
create or replace trigger xxx
before
update
on emp
for each row
begin
update backups set sal=:new.sal where empno=:new.empno;
dbms_output.put_line('成功备份:'||:new.empno||'的工资'||:new.sal||'元');
end;
/
update emp set sal=sal+10;
commit;
select * from emp;
select * from backups;
成功备份:7369的工资1549.88元
成功备份:7499的工资2949.95元
成功备份:7521的工资2511.49元
成功备份:7566的工资5629.44元
成功备份:7654的工资2511.49元
成功备份:7698的工资5385.86元
成功备份:7782的工资4606.37元
成功备份:7839的工资9575.59元
成功备份:7844的工资3047.4元
成功备份:7900的工资1868.42元
成功备份:7902的工资5678.15元
成功备份:7934的工资2618.66元
成功备份:8000的工资1546.88元
可以通过跑服务,数据同步到物化视图中,物化视图会比dblink快
host cls命令在SQLPlus中是清屏,就像在cmd中的cls一样。
触发器创建后只要你不删除是会存在的,但是你可以自己控制它是否起作用。如:
ALTER TRIGGER trigger_name DISABLE; -- 失效,生效改为enable
ALTER TABLE table_name DISABLE ALL TRIGGERS; -- 批量失效,批量生效改为enable
ALTER TRIGGER trigger_name COMPILE; -- 重新编译trigger
DROP TRIGGER trigger_name; -- 删除trigger
能调用,
if判断,在编程语言和前段代码中实现,这是我理解的。仅供参考!!!
查询语句只是用来查询已有的数据,不会对数据库表里的数据产生任何影响。触发器主要是针对表来操作的,我是这样理解的
好多公司还是要用的
工作时间内可成功插入数据;非工作时间插入,触发器将被触发而报错。
1、掌握触发器的概念和语法 2、通过案例的学习,能够独立编写触发器