当前位置:首页 » 编程软件 » oracle编译触发器

oracle编译触发器

发布时间: 2022-04-15 19:42:46

‘壹’ oracle 触发器为什么编译不通过 大家帮忙看看。

触发器应该没有错误,如果编译报错,可能是当前用户没有访问dbms_lock包的权限,使用SYS用户授权一下就可以了。
grant execute on DBMS_LOCK to 用户名称;

‘贰’ Oracle如何创建触发器

一般在sqlplus或者其他第三方oracle工具中,按照语法及需求写好代码,直接执行创建过程即可。

一般语法如下:

CREATE[ORREPLACE]TRIGGERtrigger_name
{BEFORE|AFTER}
{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}
[OR{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}...]
ON[schema.]table_name|[schema.]view_name
[REFERENCING{OLD[AS]old|NEW[AS]new|PARENTasparent}]
[FOREACHROW]
[WHENcondition]
PL/SQL_BLOCK|CALLprocere_name;

‘叁’ oracle触发器怎么写

  1. 创建触发器,给触发器命名,在哪个表上的增删改进行触发,是否为行级触发

  2. 编写你的逻辑

  3. 编译检查是否有语法错误啥的

  4. 测试,这里的话,就是你某一个工种的最低工资增加,那属于这个工种的员工中原来是最低工资的也要增加,所以你要先把工种中最低工资查出来,根据工种号,查询属于该工种的人有哪些,把这些员工的工资查出来,再修改工种的最低工资,再查员工工资是否也增加了。

你这表也没有,我门也没有办法给你写一个很详细的。大致思路一般是这样

‘肆’ oracle 触发器提示创建的触发器带有编译错误哪位大神能给看一下

这类编译错误,一般是SQL语句敲错,或者表名不存在。

你可以把其中的语句注释掉大部分,然后看看有没错。
有错,这样就容易检查
如果没错,就释放出来一点语句检查。

很快就搞定错误了,加油!

‘伍’ oracleXE里怎么编译触发器和存储过程

你先得创建几个表,在表上建立触发器
还可以再写几个简单的过程

过程例子:
create or replace procere pro_name(...)--可带参数,也可不带
is
... --定义变量
begin
... --具体代码
end pro_name;

触发器例子:
create or replace trigger tri_name
before/after insert/delete/update on table_name
for each row
is
... --变量定义
begin
... --具体代码
end tri_name;

有问题可以HI我

‘陆’ Oracle的触发器怎么写

我以前做的一个例子,你参考下吧
第八章 触发器(Trigger)
--格式:
create or replace trigger 名称
[after|before][delete|update|insert]
[on 表 | on schema]
[referencing new as 别名 old as 别名]
[for each row]
declare
....
begin
...
exception
....
end;

--创建一个delete类型行级触发器
--删除的一行数据保存在:old
create or replace trigger emp_delete_row_trigger
after delete
on emp
referencing new as n old as o
for each row
begin
dbms_output.put_line('emp_delete_row_trigger called.');
dbms_output.put_line('删除员工:' || :o.empno || ' ' || :o.ename);
end;

delete from emp where empno=7499;
delete from emp;
--创建一个insert类型行级触发器
--插入的一行新数据保存在:new
create or replace trigger emp_insert_row_trigger
after insert
on emp
for each row
begin
dbms_output.put_line('emp_insert_row_trigger called.');
dbms_output.put_line('添加员工:' || :new.empno || ' ' || :new.ename);
end;

insert into emp(empno,ename) values(1,'empxxx');

--创建一个update类型行级触发器
--修改前的数据保存在:old
--修改后的数据保存在:new
create or replace trigger emp_update_row_trigger
after update
on emp
for each row
begin
dbms_output.put_line('emp_update_row_trigger called.');
dbms_output.put_line('修改前:' || :old.empno || ' ' || :old.ename);
dbms_output.put_line('修改后:' || :new.empno || ' ' || :new.ename);
end;

update emp
set ename='xxxx'
where empno=7499;

--语句级触发器(update,delete,insert)
create or replace trigger delete_stmt_trigger
after delete
on emp
begin
dbms_output.put_line('delete_stmt_trigger called.');
end;

delete from emp;
--判断触发器类型

----------------------------------------------------------
--每进行一次交易,就要调用触发器,自动扣除或增加账户金额
----------------------------------------------------------
create table account
(
customerName varchar2(30) primary key,
cardID varchar2(8),
currentMoney number
);
insert into account values('Daivd','10010001',5000);
insert into account values('Jason','10010002',3000);

create table trans
(
transDate date,
cardID varchar2(8),
transType varchar2(10),
transMoney number
);
insert into trans
values(sysdate,'10010001','取款',1000);

create or replace trigger trans_trigger
before insert
on trans
for each row
declare
v_currentMoney account.currentMoney%type;
begin
--判断类型
if :new.transType='取款' then
--取款
select currentMoney into v_currentMoney
from account
where cardID=:new.cardID;

if v_currentMoney < :new.transMoney then
raise_application_error(-20001,'余额不足');
end if;

update account
set currentMoney=currentMoney-:new.transMoney
where cardID=:new.cardID;
else
--存款
update account
set currentMoney=currentMoney+:new.transMoney
where cardID=:new.cardID;
end if;
exception
when no_data_found then
raise_application_error(-20002,'无效的帐户');
end;

--模式(schema)级触发器
create or replace trigger schema_trigger
before drop
on schema
begin
dbms_output.put_line('schema_trigger called');
dbms_output.put_line(ora_dict_obj_name);
dbms_output.put_line(ora_dict_obj_type);

if ora_dict_obj_name='ACCOUNT' then
raise_application_error(-20003,'ACCOUNT表不能被删除');
end if;
end;

drop table account;
--ora_dict_obj_name 操作对象名称
--ora_dict_obj_type 操作对象类型

--启用触发器
alter trigger schema_trigger enable;
--禁用触发器
alter trigger schema_trigger disable;

‘柒’ 如何编写oracle的触发器

这个问题和前几天的一个问题类似,参考一下如下代码:
create or replace trigger test_log_trigger
before insert on test_log
referencing new as n for each row
declare
v_count number;
begin
begin
select count(1) into v_count from test_log t where t.num=:n.num and t.name=:n.name;
Exception When Others Then
RAISE_APPLICATION_ERROR(-20009, sqlerrm);
end;

if v_count > 0 then
update test t
set /*修改哪些数据*/,
where t.num=:n.num and t.name=:n.name;

end if;

if v_count = 0 then
insert into test
(id, name, num,remark)
values
(:n.id,:n.name,:n.num,:n.remark);
end if;
Exception When Others Then
RAISE_APPLICATION_ERROR(-20022, sqlerrm);
end;
前几天的问题连接:http://..com/question/382137823.html?oldq=1

‘捌’ oracle中触发器都有几种

oracle中触发器有三种
1.DML触发器
ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。
2 .替代触发器
由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8专门为进行视图操作的一种处理方法。
3. 系统触发器
ORACLE 8i 提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发,如ORACLE系统的启动与关闭等。

‘玖’ oracle 触发器

你在修改或者插入数据的时候把a字段的值也插入进去不就得了。。

或者,如果a的值是固定的。
那修改下表结构也可以。
alter table tableA modify (a varchar2(8) default '000');
就是给这个字段一个默认值。

‘拾’ ORACLE在创建触发器时发生编译错误

create or replace trigger emppp
before insert or update or delete
on emo
declare
var_action varchar2(30);
begin
if inserting then
var_action:='INSERT';END IF;
if updating then
var_action:='UPDATE';END IF;
if deleting then
var_action:='DELETE';
end if;
insert into empp
values(user,sysdate,var_action);
end emppp;

热点内容
哈夫曼编码算法实现 发布:2025-03-17 11:23:31 浏览:383
录音机可以存储信息吗 发布:2025-03-17 11:13:32 浏览:172
邮件服务器php 发布:2025-03-17 11:09:42 浏览:477
心跳包源码 发布:2025-03-17 11:03:29 浏览:798
安卓苹果通讯录怎么同步 发布:2025-03-17 09:58:12 浏览:175
ai缓存 发布:2025-03-17 09:48:27 浏览:923
翘嘴水滴轮什么配置 发布:2025-03-17 09:47:34 浏览:584
小蚁摄像机如何云存储 发布:2025-03-17 09:42:42 浏览:819
如何修改自己的名字和密码 发布:2025-03-17 09:32:20 浏览:790
宝马3系枪灰色轮毂是哪个配置 发布:2025-03-17 09:28:17 浏览:516