导航:首页 > 源码编译 > oracle编译触发器的命令

oracle编译触发器的命令

发布时间:2022-11-17 16:08:40

⑴ LINUX下,对ORACLE数据库脚本(比如存储过程或是触发器)进程编译,用哪个命令

sqlplus里
@${filename}

showerror -- 查看编译错误

⑵ oracle 触发器

CREATE OR REPLACE TRIGGER insert_trigger
AFTER INSERT ON emp
DECLARE
CURSOR c_rows IS
SELECT 'id',salary from emp;
BEGIN
for c_each_row in c_rows loop
if c_each_row.salary<0 THEN
update emp set salary=0 where id=c_each_row.id;
else if c_each_row.salary>10000 THEN
update emp set salary=10000 where id=c_each_row.id;
end if;
end loop;
END insert_trigger;

⑶ 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如何创建触发器

一般在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中设置触发器的具体步骤

参考资料 中为 Oracle 创建触发器的一些例子。

⑹ oracle建立触发器 success with compilation error

1、oracle数据库中的触发器,insert into users values('05','trigger','普通','trigger','拥有一般权限');。

⑺ 求一个oracle触发器的写法:

这个我知道,因为我也犯过类似的错误,其实本身创建触发器语句没什么错误。但是因为你是在SQL窗口下运行这些代码就会出现编译错误,那么如果你换一个窗口--比如命令窗口(oracle 10g)这样呢创建触发器,函数,过程就都不会游编译错误了

⑻ oracle创建的触发器带有编译错误

告诉你两点:
1、当出现警告或者错误的时候,使用show error 命令,可以查看错误的具体信息,在信息中可以定位错误的具体位置。
2、你的问题是:【endif;】不能写在一起,【end if;】是正确的。
类似的还有【end loop】 等。

---
以上,希望对你有所帮助。

⑼ Oracle存储过程触发器用法

1:什么叫存储过程?
在oracle中,可以在数据库中定义子程序,这种程序块叫存储过程(procere),它存放在数据字典中,可以在不同用户和应用程序中共享,并可以实现程序的优化和重用。
2:存储过程的有点?
过程运行在服务器端,执行速度快
过程执行一次后代码就驻留在高速缓存中,在以后的操作中,直接调用缓存数据。
确保数据库的安全性,可以不授权用户直接访问应用程序中的一些表,而是授权用户执行访问数据库的过程。
自动完成需要预先执行的任务,过程可以在系统启动时自动运行。、
3:存储过程的创建和执行
用户存储过程只能定义在当前数据库中,可以使用sql语句或OEM创建。
默认情况下,用户创建的存储过程归登录数据库的用户所拥有,DBA可以把许可授权给其他用户。
Sql命令创建存储过程
CREATEprocere过程名
【(parameterparameter_modedate_type,….n)】
IS|AS
BEGIN
SQL_STATEMENT
END过程名
其中
Parameter表示过程的参数。
parameter_mode:参数的类型,过程参数和函数参数一样,有三种类型IN,OUT,INOUT
IN表示参数是输入给过程的。
OUT表示采纳数载过程中被赋值,可以传给过程的外部。
INOUT表示可以传内,可以传外。
调用存储过程
直接输入存储过程的名字可以执行一个已经定义的存储过程。
存储过程的编辑修改
修改存储过程虽然可以和修改视图一样,用ALTERprocere,但是他是用来重新编译和验证用的,如果要修改过程定义,建议还是用createorreplace。
存储过程的删除
当某个过程不再需要的时候,应该将其从内存中删除,以释放它占用的资源。
Dropprocere存储过程名。
Dropprocereupdate_info.
触发器
触发器(trigger)是一些过程,与表联系紧密,用于保护表中的数据,当一个基表被修改时,触发器自动就会执行。例如出入其可以实现多个表间数据的一致性和完整性。
一般情况下,对表数据的操作有增删查改,维护数据的触发器也可以分为多种,每张基表最多可以建立12个触发器。
1:Beforeinsert2:beforeinsertfoeachrow;3:afterinert
4:afterinsertforeachrow5:beforeupdate6:beforeupdateforeachrow
7:afterupdate8:afterupdateforeachrow;9:beforedelete;
10:beforedeleteforeachrow11:afterdelete12:afterdeleteforeachrow.
利用sql语句创建触发器
语法规则
Createorreplacetrigger触发器名
{before|after|insteadof}
{delete【orinsert】【orupdate】【ofcolumn….n】}
On表名|视图名
【foreachrow】[]wherecondition]]
Sql_statement[,,,n]
参数说明
Insteadof:指定在创建替代触发器。
Ofcolumn指定在哪些列上进行触发。。。
创建触发器的限制
1:触发器中有效的语句可以包括DML语句,但是不能包括DDL,rollback,commit
,savepoint都不适用。

⑽ 求一个简单的oracle 触发器 写法

创建两个表:

createtablea
(stdidint,
stdnamevarchar2(10));

createtableb
(stdidint,
stdnamevarchar2(10));

创建触发器:

CREATEORREPLACETRIGGERtr_insert
afterinsert
ONa
FOREACHROW
BEGIN
INSERTINTOb(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;

验证,在a表中插入数据:

insertintoavalues(1,'a');
commit;

验证b表结果:

阅读全文

与oracle编译触发器的命令相关的资料

热点内容
北京文件夹加密多少钱 浏览:669
什么是车鉴定app 浏览:64
战地一私人服务器怎么买 浏览:497
陈天程序员 浏览:833
编译原理如何运用到编程中 浏览:17
linux选择数据库 浏览:376
php两个数组差集 浏览:978
迷你pdf阅读器下载 浏览:433
做一个python小程序 浏览:655
pythonossystem和 浏览:645
win2008如何搭建ftp服务器 浏览:53
安卓手机为什么不翻牌 浏览:546
删除pkpm及相关文件夹 浏览:481
房贷解压银行内部流程 浏览:734
安卓手机如何更改语音 浏览:601
android红包实现 浏览:734
苹果的nvme为什么安卓不用 浏览:32
python输入单词统计个数 浏览:998
脚本软件提取源码 浏览:281
程序员能给自己的微信钱包刷钱么 浏览:73