`
sd8089730
  • 浏览: 259330 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

Oracle (替代触发器)

阅读更多
create or replace trigger 名

 instrad of delete from 视图

 begin

 执行输出

end;

比如你写删除后 触发器输出该提示后 

例如:begin

dbms_output.put_line(:old.ename) 

end;

这里写上这个提示后 如果执行 delete from v_emp2;的话  提示是提示 (但是实际不删除视图中内容)



如果你想真正删除表中内容的话

在begin里面执行真正的  delete 删除表中内容

 

DML触发器
create trigger 名
before|after   insert or update or delete on 表名
referencing old as o new as n
for each row
declare
--声明
begin
--执行
 :new  :old
 inserting updating  deleting
end 名;

替代触发器 只可以添加在视图上
create trigger 名 
instead of   insert or update or delete on 表名
referencing old as o new as n
for each row
declare
--声明
begin
--执行
 :new  :old
 inserting updating  deleting
end 名;

drop table students cascade constraint;
create table students(
id int primary key,
name varchar2(20));
insert into students values(1001,'TOM');
insert into students values(1002,'CAT');
insert into students values(1003,'TOMCAT');

drop table s1;
create table s1(
sid int,
kid int,
score int,constraint fk_s1_sid foreign key(sid) references students(id));
insert into s1 values(1001,1,80);
insert into s1 values(1001,2,98);
insert into s1 values(1002,1,88);

drop table s2;
create table s2(
sid int,
kid int,
score int,constraint fk_s2_sid foreign key(sid) references students(id));
insert into s2 values(1002,2,68);
insert into s2 values(1003,1,100);
insert into s2 values(1003,2,45);


级联更新

1 查询到那些表和主表相关联
  1查看当前主键约束的信息
   select constraint_name,constraint_type,table_name 
   from user_constraints
   where table_name='STUDENTS'
  2 查看外键表
   select table_name,constraint_name 
   from user_constraints 
   where r_constraint_name='SYS_C005161';
2 查看到表中相关联的字段
 select column_name from user_cons_columns where constraint_name='FK_S1_SID';





create or replace trigger tri_students_update
after update on students
for each row
declare
 v_update varchar2(2000);
begin
 for r in (select table_name tname,constraint_name cname 
           from user_constraints 
           where r_constraint_name in (select constraint_name
                                   from user_constraints
                                   where table_name='STUDENTS') )
 loop
  for r2 in (select column_name  cname from user_cons_columns where constraint_name=r.cname)
  loop
   v_update:='update '||r.tname||' set '||r2.cname||'='||:new.id ||' where ' ||r2.cname||'='||:old.id;
   dbms_output.put_line(v_update);
   execute immediate v_update;
  end loop;
 end loop;
end;


========================================
execute immediate 

=================包
1包头
create or replace package pck_test is
--函数
function userdate return varchar2 ;
--过程
procedure p_test;
end pck_test;
2包体
create or replace package body pck_test as
--函数实现
function userdate return varchar2 is
begin
 return to_char(sysdate,'yyyy-mm-dd hh24:mi:ss day');
end userdate;
--过程的实现
procedure p_test as
begin
 dbms_output.put_line('procedure ......package.');
end p_test;
end pck_test;





==========================JAVA调用存储过程和函数
1 创建一个无参数的存储过程
    创建EMP2空表 如果表不存在创建,存在则清空内容记录
create or replace procedure p1 is
begin
    begin
    execute immediate 'create table emp2 as select * from emp where 1<>1';
    exception
    when others then
    null;
    end;
 execute immediate 'delete from emp2';
end p1;
2 创建一个带IN参数的存储过程
    输入员工编号修改其员工工作为经理;
create or replace procedure p2(in_empno int) is
begin
 update emp set job='MANAGER' where empno=in_empno;
end;
3 创建一个带OUT参数的存储过程
   返回EMP表中一共有多少条记录
create or replace procedure p3(out_count out int) is
begin
 select count(*) into out_count from emp;
end;
4 创建一个带IN和OUT参数的存储过程
   输入部门编号删除部门员工返回删除数量
create or replace procedure p4(in_deptno in int,out_count out int) is
begin
 delete from emp where deptno=in_deptno;
 out_count:=sql%rowcount;
end;
5 创建一个存储过程返回一个结果集
   输入起始行和终止行返回结果集
create or replace procedure p5(in_start int,in_stop int,out_cursor out sys_refcursor) is
begin
 open out_cursor for
    select * from (select rownum r,emp.* from emp) where r between in_start and in_stop;
end;
6 创建一个函数返回当前时间
   输入一个自定义的格式 返回指定格式的时间
create or replace function p6(in_date_format varchar2) return varchar2 as
begin
 return to_char(sysdate,in_date_format);
end;

 

分享到:
评论

相关推荐

    oracle_触发器的种类和触发事件

    触发器可以分为四种类型:DML触发器、DDL触发器、替代触发器和数据库事件触发器。 DML触发器是定义在表上的触发器,由DML事件引发。DML事件包括INSERT、UPDATE和DELETE三种。DML触发器可以在 BEFORE 或 AFTER 触发...

    oracle 触发器实时调用java 中http接口

    在Oracle数据库中,触发器是一种特殊类型的存储过程,它会在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。在这个场景中,我们关注的是一个特定的触发器,它在插入数据后被调用,并通过存储过程来...

    关于oracle触发器before和after的应用问题

    - **替代触发器**:专门设计用于视图操作,解决了直接对多表视图进行修改时的局限性。替代触发器会在试图对视图进行DML操作时激活,从而实现底层表的间接更新。 #### 系统触发器 系统触发器是一种特殊类型,可在...

    Oracle DML触发器在数据库编程中的应用.pdf

    Oracle DML 触发器有三种主要类型:DML 触发器、替代触发器和系统触发器。其中,DML 触发器是因对数据库表进行 INSERT、UPDATE、DELETE 操作而被激发的触发器。该类型触发器可以在上述操作之前或之后激发运行,也...

    oracle 数据库 触发器

    - **替代触发器**(INSTEAD OF):仅应用于视图,当试图在视图上执行INSERT、UPDATE或DELETE时,替代实际的DML操作执行自定义的行为。 2. **DML触发器的要点**: - **触发表**:触发器与特定的表相关联,对表上的...

    oracleDML触发器1.ppt

    这意味着,当试图对视图执行DML操作时,替代触发器将执行自定义的逻辑,而不是尝试在基础表上执行操作。 10.4 系统触发器 系统触发器是Oracle自动创建并触发的,它们响应数据库级别的事件,如数据库启动、用户登录...

    oracleDML触发器.pptx

    替代触发器会代替DML语句执行,实现对底层表的实际操作。 5. **系统触发器和用户事件触发器** - **系统触发器**是由数据库系统在特定系统事件(如数据库启动、关闭等)发生时触发的。 - **用户事件触发器**是用户...

    ORACLE触发器在软件开发中的应用11

    - **Instead of触发器**:替代默认操作,告诉Oracle执行的具体动作。 **4. 触发器的执行顺序** 触发器的执行遵循一定的顺序,包括语句级和行级的Before和After触发器,以确保在合适的时间执行相应的逻辑。 **5. ...

    oracle通过触发器,实现序列自增

    ### Oracle通过触发器实现序列自增 在Oracle数据库中,序列是一种非常实用的对象,它可以用于自动产生唯一的数值。本文将详细介绍如何通过触发器与序列相结合的方式,在Oracle数据库中实现记录的自增功能。 #### ...

    oracle触发器功能介绍

    Oracle触发器是数据库对象之一,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器主要用于实现复杂的业务规则和数据验证,它们可以扩展SQL的功能,允许在数据修改前后执行一系列的动作。...

    Oracle触发器与存储过程高级编程

    2. **触发器的时机**:触发器可以在事件发生前(BEFORE)或后(AFTER)执行,此外,还有一种特殊的触发器类型——INSTEAD OF触发器,它在特定条件下替代触发事件的执行。 3. **触发器的使用场景**:触发器常用于...

    把ORACLE触发器说透

    2. **替代触发器(INSTEAD OF)**:当需要对联接多个表的视图进行操作时,由于直接操作视图是不允许的,此时可以使用替代触发器。替代触发器定义在视图上,当尝试对视图执行DML操作时,替代触发器会执行自定义的逻辑...

    ORACLE触发器、内置程序包教学.doc )

    其中,`AFTER` 和 `BEFORE` 指定触发器是在事件发生后还是前执行,`INSTEAD OF` 则用于视图,意味着触发器的执行将替代原本的操作。`REFERENCING` 子句允许引用新行和旧行,而 `FOR EACH ROW` 表明触发器将对每行...

    一个完整的ORACLE的触发器代码

    ### ORACLE触发器知识点解析 #### 一、触发器概述 在Oracle数据库中,触发器是一种存储过程,它被设计为当特定事件(如数据插入、更新或删除)发生时自动执行。触发器可以用于执行复杂的业务逻辑或者数据完整性...

    oracle触发器与存储过程高级编程

    - `INSTEAD OF`触发器:用于视图,替代基本的DML操作。 3. **触发器示例** 创建一个更新员工薪水后记录审计日志的触发器: ```sql CREATE OR REPLACE TRIGGER log_salary_change AFTER UPDATE OF salary ON ...

    Oracle触发器语法

    - **INSTEAD OF触发器**:替代DML操作,告诉Oracle执行哪些操作而不是默认的操作。 **触发器的作用**: - **安全性**:触发器可以基于数据库值授予或限制用户权限,例如限制特定时间或条件下的数据操作。 - **...

    oracle 触发器 必懂

    替代触发器(INSTEAD OF触发器)是定义在视图上的触发器,用于替换对视图的操作,例如插入、删除和更新。当试图通过视图执行这些操作时,实际执行的是替代触发器定义的操作,而不是直接对视图进行操作。 #### 9.6 ...

    ORACLE PL_SQL编程之八:把触发器说透.pdf

    2. **替代触发器(INSTEAD OF)**:这种触发器主要设计用于处理视图,因为直接对由多张表组成的视图进行DML操作通常是不允许的。替代触发器可以在试图上的DML操作发生时执行,代替实际的DML操作,使得对视图的更新...

    oracle触发器

    2. 替代触发器(INSTEAD OF):这种触发器主要应用于视图,允许在对视图执行DML操作时,实际操作底层的数据表。因为直接对多表联接的视图进行DML操作通常是不允许的,替代触发器提供了处理此类操作的方法。 3. 系统...

    oracle触发器.doc

    - **INSTEAD OF触发器**:替代DML操作,而不是在操作后响应,主要用于视图。 - **系统条件触发器**:响应特定的系统事件,如数据库启动或关闭。 - **用户事件触发器**:响应用户定义的事件,实现定制化的数据库...

Global site tag (gtag.js) - Google Analytics