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;
分享到:
相关推荐
触发器可以分为四种类型:DML触发器、DDL触发器、替代触发器和数据库事件触发器。 DML触发器是定义在表上的触发器,由DML事件引发。DML事件包括INSERT、UPDATE和DELETE三种。DML触发器可以在 BEFORE 或 AFTER 触发...
在Oracle数据库中,触发器是一种特殊类型的存储过程,它会在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。在这个场景中,我们关注的是一个特定的触发器,它在插入数据后被调用,并通过存储过程来...
- **替代触发器**:专门设计用于视图操作,解决了直接对多表视图进行修改时的局限性。替代触发器会在试图对视图进行DML操作时激活,从而实现底层表的间接更新。 #### 系统触发器 系统触发器是一种特殊类型,可在...
Oracle DML 触发器有三种主要类型:DML 触发器、替代触发器和系统触发器。其中,DML 触发器是因对数据库表进行 INSERT、UPDATE、DELETE 操作而被激发的触发器。该类型触发器可以在上述操作之前或之后激发运行,也...
- **替代触发器**(INSTEAD OF):仅应用于视图,当试图在视图上执行INSERT、UPDATE或DELETE时,替代实际的DML操作执行自定义的行为。 2. **DML触发器的要点**: - **触发表**:触发器与特定的表相关联,对表上的...
这意味着,当试图对视图执行DML操作时,替代触发器将执行自定义的逻辑,而不是尝试在基础表上执行操作。 10.4 系统触发器 系统触发器是Oracle自动创建并触发的,它们响应数据库级别的事件,如数据库启动、用户登录...
替代触发器会代替DML语句执行,实现对底层表的实际操作。 5. **系统触发器和用户事件触发器** - **系统触发器**是由数据库系统在特定系统事件(如数据库启动、关闭等)发生时触发的。 - **用户事件触发器**是用户...
- **Instead of触发器**:替代默认操作,告诉Oracle执行的具体动作。 **4. 触发器的执行顺序** 触发器的执行遵循一定的顺序,包括语句级和行级的Before和After触发器,以确保在合适的时间执行相应的逻辑。 **5. ...
### Oracle通过触发器实现序列自增 在Oracle数据库中,序列是一种非常实用的对象,它可以用于自动产生唯一的数值。本文将详细介绍如何通过触发器与序列相结合的方式,在Oracle数据库中实现记录的自增功能。 #### ...
Oracle触发器是数据库对象之一,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器主要用于实现复杂的业务规则和数据验证,它们可以扩展SQL的功能,允许在数据修改前后执行一系列的动作。...
2. **触发器的时机**:触发器可以在事件发生前(BEFORE)或后(AFTER)执行,此外,还有一种特殊的触发器类型——INSTEAD OF触发器,它在特定条件下替代触发事件的执行。 3. **触发器的使用场景**:触发器常用于...
2. **替代触发器(INSTEAD OF)**:当需要对联接多个表的视图进行操作时,由于直接操作视图是不允许的,此时可以使用替代触发器。替代触发器定义在视图上,当尝试对视图执行DML操作时,替代触发器会执行自定义的逻辑...
其中,`AFTER` 和 `BEFORE` 指定触发器是在事件发生后还是前执行,`INSTEAD OF` 则用于视图,意味着触发器的执行将替代原本的操作。`REFERENCING` 子句允许引用新行和旧行,而 `FOR EACH ROW` 表明触发器将对每行...
### ORACLE触发器知识点解析 #### 一、触发器概述 在Oracle数据库中,触发器是一种存储过程,它被设计为当特定事件(如数据插入、更新或删除)发生时自动执行。触发器可以用于执行复杂的业务逻辑或者数据完整性...
- `INSTEAD OF`触发器:用于视图,替代基本的DML操作。 3. **触发器示例** 创建一个更新员工薪水后记录审计日志的触发器: ```sql CREATE OR REPLACE TRIGGER log_salary_change AFTER UPDATE OF salary ON ...
- **INSTEAD OF触发器**:替代DML操作,告诉Oracle执行哪些操作而不是默认的操作。 **触发器的作用**: - **安全性**:触发器可以基于数据库值授予或限制用户权限,例如限制特定时间或条件下的数据操作。 - **...
替代触发器(INSTEAD OF触发器)是定义在视图上的触发器,用于替换对视图的操作,例如插入、删除和更新。当试图通过视图执行这些操作时,实际执行的是替代触发器定义的操作,而不是直接对视图进行操作。 #### 9.6 ...
2. **替代触发器(INSTEAD OF)**:这种触发器主要设计用于处理视图,因为直接对由多张表组成的视图进行DML操作通常是不允许的。替代触发器可以在试图上的DML操作发生时执行,代替实际的DML操作,使得对视图的更新...
2. 替代触发器(INSTEAD OF):这种触发器主要应用于视图,允许在对视图执行DML操作时,实际操作底层的数据表。因为直接对多表联接的视图进行DML操作通常是不允许的,替代触发器提供了处理此类操作的方法。 3. 系统...
- **INSTEAD OF触发器**:替代DML操作,而不是在操作后响应,主要用于视图。 - **系统条件触发器**:响应特定的系统事件,如数据库启动或关闭。 - **用户事件触发器**:响应用户定义的事件,实现定制化的数据库...