本文目录
- oracle中,用pl/sql创建触发器报触发器无效且未通过重新验证
- Oracle如何创建触发器
- oracle下用sql语句建立触发器
- oracle 写一个触发器,新手
- oracle里面创建的触发器存在了哪里
- 在oracle中创建了一个触发器,但是有问题,求高人指点!
- 创建oracle系统事件触发器需要有什么权限,scott用户创建不了
- Oracle下,如何在两个表间创建触发器
- 如何使用oracle sql developer创建编辑触发器
oracle中,用pl/sql创建触发器报触发器无效且未通过重新验证
一般情况就是触发器的语法不正确。
触发器的一般语法如下:
CREATE TRIGGER trigger_name{BEFORE | AFTER }{INSERT | DELETE | UPDATE }ON view_name PL/SQL_BLOCK | CALL procedure_name;
Oracle如何创建触发器
一般在sqlplus或者其他第三方oracle工具中,按照语法及需求写好代码,直接执行创建过程即可。
一般语法如下:
CREATE TRIGGER trigger_name{BEFORE | AFTER }{INSERT | DELETE | UPDATE }ON view_name PL/SQL_BLOCK | CALL procedure_name;
oracle下用sql语句建立触发器
createorreplacetriggertr_salgrade_del beforedeleteonsalgradebegin raise_application_error(-20000,’不能对salgrade进行删除操作。!’);end;/
oracle 写一个触发器,新手
创建两个表:
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的数据,剩下的自己验证吧, 不给你截图了
oracle里面创建的触发器存在了哪里
可以在 user_triggers 视图里面查询 已创建的触发器。
例如:
SELECT trigger_name, statusFROM user_triggersWHERE table_name=’TEST_TRIGGER_TABLE’;TRIGGER_NAME STATUS------------------------------------------------------------ ----------------BEFOREALLTEST ENABLEDBEFOREALLTEST2 ENABLED
在oracle中创建了一个触发器,但是有问题,求高人指点!
CREATE OR REPLACE TRIGGER tri_customerDelete BEFORE DELETE ON t2 FOR EACH ROW DECLARE cn INT := 0;BEGIN select 1 INTO cn from t1 where t1.fplanname = ’sky001’ and t1.fid = :old.FParentID ; raise_application_error(-20001, ’error’); EXCEPTION WHEN no_data_found THEN NULL;END;试一下这个触发器,由于你是在t2这个表上建立触发器,行级触发器不能查询基表,所以不能在触发器的查询中出现t2,看到你的要求直接使用:old.属性就可以了。
创建oracle系统事件触发器需要有什么权限,scott用户创建不了
同意楼上的,如果你是10g以上的,你可以到em管理器里去查看“用户”,输入soctt 然后为它分配详细的权限。是在不行 用sys账户登录:然后grant create session to scott;grant create trigger to scott;还不行那就只有grant dba to scott;
Oracle下,如何在两个表间创建触发器
你的语法有些问题。 create or replace trigger trg_upd after update on student for each row when (NEW.s_no 《》 OLD.s_no ) begin update score set score.s_no =:NEW.s_no where score.s_no =:OLD.s_no ; end trg_upd; /
如何使用oracle sql developer创建编辑触发器
在pl/sql中, 左面需找triggers目录, 展开可以看到你新建的trigger, 右键单击,然后选择,看下面的控制台有么有异常信息