`
lancezhcj
  • 浏览: 48781 次
  • 性别: Icon_minigender_2
  • 来自: 衡阳
社区版块
存档分类
最新评论

创建触发器

 
阅读更多
   这些过程中既涉及了update的用法,又涉及了多种触发器的创建,因而记录一下,还有在写sql语句的过程中发现nvl方法的一个用法很有用,习惯的使用方式是:nvl(col1,'0'/*或者是别的指定的值*/),另一个值得使用的方式:nvl(col1,col2),如果要取的col1的值为null,则取第col2的值,这两个列可以是一个表中的,也可以是不同表中的,nvl在计算的时候非常有用;其它的还有decode、case、to_number、to_date、trunc、sum、max(min)、avg、sysdate(dual)、rownum等等
--1、用户表更新时同步到my_person
create or replace trigger MY_TRI_USER
after insert or update or delete on t_user
for each row
declare
row_count number;
begin
  if inserting or updating then
      select count(*) into row_count from my_person where id=:new.user_id;
      if(row_count>0) then  --修改
         update amy_person a            set (name,login_name,password,idcard,birth_date,sex,mail)=
                (select u.name,u.user_name,u.password,e.certi_code,e.birthday,decode(e.gender,'M','1','F','2','未说明'),e.email from t_user u,t_employee e where u.user_id=e.emp_id  and u.user_id = a.id)
            where exists (select 1 from t_user u,t_employee e where u.user_id = a.id and u.user_id=e.emp_id);
       else   --新增
          insert into my_person(id,name,login_name,password,idcard,birth_date,sex,mail,tel)
          select u.user_id,u.user_name,u.password,e.certi_code,e.birthday,decode(e.gender,'M','1','F','2','未说明'),e.email,e.telph
            from t_user u,t_employee e where u.user_id=e.emp_id and rownum=1;
       end if;
  end if;
  if deleting then
      delete from my_person where id=:old.user_id;
  end if;
end;
--2、用户更新电话时同步到my_person

create or replace trigger MY_TRI_USER_FILTER
after update of tel on MY_USER_FILTER
for each row
begin
   update my_person set tel=:new.tel where id = :new.id;
end;

3、创建基于视图的instead of触发器【以下示例是摘抄的】
create or replace trigger tri_emp_view
instead of update
on my_emp_view
for each row
declare
begin
update emp set ename = :new.ename
where empno = :new.empno;

update dept set dname = :new.dname
where deptno = :new.deptno;
end;


触发器死锁
在itpub上看到的一段语句,特记录下来:怎么确定是出现了死锁或者锁等待的?

select '阻塞者(' || sb.sid || ':' || sb.serial# || '-' || sb.username || ')-' ||
       qb.sql_text blockers,
       '等待者(' || sw.sid || ':' || sw.serial# || '-' || sw.username || ')-' ||
       qw.sql_text waiters
  from v$lock lb, v$lock lw, v$session sb, v$session sw, v$sql qb, v$sql qw
where lb.sid = sb.sid
   and lw.sid = sw.sid
   and sb.prev_sql_addr = qb.address
   and sw.sql_address = qw.address
   and lb.id1 = lw.id1
   and sb.lockwait is null
   and sw.lockwait is not null
   and lb.block = 1;

分享到:
评论

相关推荐

    在数据库中创建触发器是命名无效该怎么办?

    ### 在数据库中创建触发器时遇到命名无效的问题 在数据库管理与开发过程中,触发器是一种非常重要的机制,它能够在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的动作。触发器可以用来确保...

    循环某数据库所有表,自动创建触发器

    创建触发器可以帮助我们实现数据的完整性、一致性以及业务规则的自动化执行。本教程将深入讲解如何针对一个数据库中的所有表自动创建`CreatedAt`字段的触发器,以记录每个表中数据的创建时间。 首先,我们需要了解...

    14、为学生表创建触发器,要求: (1)当用户成功删除该表中的一条或多条记录时,触发器自动删

    14、为学生表创建触发器,要求: (1)当用户成功删除该表中的一条或多条记录时,触发器自动删

    JDBC创建触发器 JDBC存储过程 JDBC创建表 数据备份 java备份数据库/JAVA恢复数据、java导入sql脚本

    首先,**JDBC创建触发器** 是一种数据库级别的事件响应机制,允许在特定数据库事件(如插入、更新或删除记录)发生时自动执行预定义的SQL代码。通过JDBC,我们可以编写Java程序来动态生成并执行创建触发器的SQL语句...

    在DB2中创建第一个触发器

    在DB2中创建触发器是数据库管理中的一个重要环节,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)执行之前或之后自动运行预定义的SQL语句。本文将详细介绍如何在DB2数据库中创建一个触发器,以及触发器的...

    chufaqi.rar_sql 触发器_创建触发器_触发器

    创建触发器通常使用CREATE TRIGGER语句,例如创建一个简单的INSERT触发器: ```sql CREATE TRIGGER trg_InsertTable ON TableName AFTER INSERT AS BEGIN -- 触发器体,包含你要执行的SQL语句 INSERT INTO Another...

    4、数据库课程设计《SQL Server图书馆管理系统》之创建触发器源码

    本图书馆管理系统谨根据实际需要,创建了七个触发器,就此,创作者对这些触发器做如下说明: 1、tri_Book 功能表现:只有在图书馆内相关书籍尚有库存的情况下,读者才可以进行借阅操作 2、tri_SborrowNum 功能...

    oracle创建触发器实例

    Oracle 创建触发器是一种数据库编程技术,用于在特定的数据库事件发生时自动执行一段代码。在这个实例中,我们看到的是一个防止非本地机器执行DDL(Data Definition Language)操作的触发器,比如`TRUNCATE`、`ALTER...

    SQL创建触发器示例语句

    ### SQL创建触发器的基本语法 首先,我们需要了解创建触发器的基本语法结构。以下是一个简单的模板: ```sql CREATE TRIGGER trigger_name ON table_name FOR | AFTER { INSERT | UPDATE | DELETE } AS BEGIN -- ...

    Library-SQL.zip_trigger example SQL_创建触发器

    本文将通过"Library-SQL.zip_trigger example SQL_创建触发器"这个例子,详细讲解如何在数据库中创建触发器以及相关知识点。 首先,我们需要理解触发器的基本概念。触发器是由数据库管理系统在执行DML语句(INSERT...

    sqlserver 创建触发器 远程服务器相应执行SQL语句

    ### SQL Server 创建触发器实现远程服务器相应执行SQL语句 #### 概述 本文将详细介绍如何在SQL Server中创建触发器来实现当本地数据库发生数据插入时,在远程服务器上相应地执行SQL语句,实现数据同步。这通常用于...

    SQL中如何创建触发器.pdf

    在SQL中创建触发器是数据库编程的一个重要方面,它使得数据库能够根据数据变化自动进行一系列操作,增强了数据的完整性和业务逻辑的自动化处理。 SQL Server是一个广泛使用的RDBMS,它支持通过Transact-SQL(T-SQL...

    SQL server创建触发器实现级联删除

    ### SQL Server 创建触发器实现级联删除 在数据库管理中,触发器是一种特殊类型的存储过程,它被设计为响应特定的事件(如插入、更新或删除数据)而自动执行。本文将详细介绍如何在 SQL Server 中创建一个触发器来...

    数据库创建触发器

    创建学生管理系统的触发器,可用于课程设计,创建sql数据库学生管理系统,任务

    在MSSQLServer中创建触发器.pdf

    在MSSQL Server中创建触发器的相关知识点内容如下: 1. 触发器基础概念: 触发器(Trigger)是一种特殊类型的存储过程,它是自动执行的程序块,用于对数据库中的数据操作(如INSERT、UPDATE、DELETE)进行响应。...

    sql.rar_sql编程_创建触发器_数据库实现

    这个“sql.rar_sql编程_创建触发器_数据库实现”资源包含了一个名为“ZYH.sql”的文件,很可能是某个SQL数据库的设计或操作示例,特别关注了触发器的创建和数据库的实现。 首先,让我们深入了解SQL编程的基础。SQL...

    SQL Server创建触发器

    本文主要是介绍创建触发器的必要性,然后介绍触发器的应用场合,以及创建触发器能给我呢带来的好处,最后以实际的代码来阐述创建触发器的具体过程及步骤。

Global site tag (gtag.js) - Google Analytics