触发器使用

原创 2013年12月04日 22:51:24
/* Source of PACKAGE BODY SYS.DBMS_OUTPUT is not available */
/
--定义变量 输出变量
declare
PI constant Pls_Integer:=3.1415655;
BEGIN
  dbms_output.put_line('PI=:'||PI);
END;




--两种动态类型:%type可以代表某列一致的类型, %rowtype可以代表与整条记录一致的集合类型
declare
e_name emp.ename%type;
e_mpinfo emp%rowtype;
--一般的复合类型(类似C语言的结构体)
type sal_comm is record(
      sal emp.sal%type,
      comm emp.comm%type
);
sc sal_comm;
type point is record(
     x pls_integer,
     y pls_integer
);
p point;
begin
select ename into e_name from emp where empno=7369;--赋值 用into
select * into e_mpinfo from emp where empno=7369;
dbms_output.put_line('姓名:'||e_name);
dbms_output.put_line('编号:'||e_mpinfo.empno);
--绑定数据 输出数据
select sal, comm into sc from emp where empno=7369;
dbms_output.put_line('7369''s sal:' || sc.sal || ' and comm is ' || nvl(sc.comm, 0));
p.x := 4;
p.y := 50;
dbms_output.put_line('p:' || p.x || ':' || p.y);
dbms_output.put_line(sc.sal);
end;


declare
-- v_deptno:=&no;                 --占位.弹对话框临时赋值,类似于C语音的scanf
--联合数组
type mytype is table
of emp%rowtype
index by varchar2(5);
emps mytype;
--嵌套表
type namestype is table 
of varchar2(10);
names namestype;
--可变数组
type daystype is varray(7) of varchar2(10);
days daystype:=daystype('Sunday','Monday');
begin
     --联合数组输出
     select * into emps('one') from emp where empno=7788;
     dbms_output.put_line('员工姓名:'||emps('one').ename);
     --嵌套表
      names := namestype('普京', '奥巴马', '雷锋');
     names.extend(4); --扩展一个 空间
     names(4) := '张三丰';
     dbms_output.put_line('第二位姓名是:'||names(2));
     --循环输出数据
     for i in 1..days.count loop
       dbms_output.put_line('days(' || i || '):' || days(i));
      end loop;
end;




--goto 示例
begin
  goto one;
  <<four>>
  for i in reverse 1..10 loop --reverse 反转数字 排序
    dbms_output.put_line('i:' || i);
    if i>8 then
      goto three;
    end if;
  end loop;
  <<two>>
  dbms_output.put_line('这是第二句话');
  goto four;
  <<three>>
  dbms_output.put_line('这是第三句话');
  goto "123";
  <<one>>
  dbms_output.put_line('这是第一句话');
  goto two;
  <<"123">>
  dbms_output.put_line('这是最后一句话');
end;


--异常绑定
declare 
isExists exception;
pragma exception_init(isExists,-1);
begin
       insert into emp(empno) values(7788);
       --捕获异常
      exception
       when isExists then
         dbms_output.put_line('主键不能重复');
end;
--1.查出人数最多的工资级别]


--2.查出重复的工资额度
 
--3.用PL/SQL打印出乘法表
begin
 for i in 1..9 loop
       for j in 1..i loop
        dbms_output.put(j||'*'||i||'='||j*i);
        dbms_output.put('  ');
        end loop; 
        dbms_output.new_line; --输出一点点空隙
    end loop;   
end;
select * from emp;
select * from dept;
select * from salgrade;
select * from bonus;
--创建触发器
create or replace trigger tr_emp_sal
before update on scott.emp for each row
begin
  if:new.sal<:old.sal then
  raise_application_error(-20010,'只能涨 不能降');
  end if;
end tr_emp_sal;
--测试触发器
update scott.emp set sal=100;
--数据字典        管理触发器
--查询已有的触发器
select * from user_triggers; 
--禁用触发器
alter trigger tirgger_name disable;
--激活触发器
alter trigger trigger_name enable;
--禁用或激活所有触发器
alter table table_name disable all triggers; 
alter table table_name enable all triggers; 
--删除触发器
drop trigger trigger_name;
--重新编译触发器
alter trigger trigger_name compile;


  
版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle Package与Package body的介绍

1、Oracle Package的作用: 可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载 2、ORACLE中的function 、package、package bodies、procedu...
  • m1ngMaidb
  • m1ngMaidb
  • 2015年03月24日 14:11
  • 1123

ORACLE PACKAGE AND PACKAGE BODY

Oracle的Package的作用 简化应用设计、提高应用性能、实现信息隐藏、子程序重载。 1、Oracle的Package除 了把存储过程放到一堆儿以外还有没有其他的作用(好处)? 你不觉得把存储...
  • fang_fang_2008
  • fang_fang_2008
  • 2014年12月04日 18:44
  • 928

浅谈触发器使用

个人重构时看有人登录时使用触发器,当时我是用存储过程+事务实现的,也没有进一步思考,表面理解触发器就是由一个事件触发另一个事件,存储过程也是封装了一组sql语句,再加上事务的一致性原则,也可以达到一个...
  • u010097777
  • u010097777
  • 2014年10月30日 11:27
  • 2144

尽量不要使用触发器

触发器的问题 重复执行 当数据从一个备份拷贝中加载,或者备份数据库的时候【触发器已经执行过了!!】; 备库应该关闭触发器;有些数据库支持not for replication; ...
  • iCode0410
  • iCode0410
  • 2014年10月20日 14:58
  • 655

C语言触发器模式

触发器模式是在条件满足或不满足时,触发特定动作的模式。 用于周期性处理过程中,根据事件触发时机,进行事件响应处理。...
  • nibiewuxuanze
  • nibiewuxuanze
  • 2017年01月18日 00:34
  • 1344

oracle 报错总结

ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数...
  • qq_40126657
  • qq_40126657
  • 2017年09月06日 15:02
  • 120

简单使用触发器(详细) SQL触发器的使用及语法

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Upda...
  • lyq5655779
  • lyq5655779
  • 2012年03月22日 10:53
  • 3994

触发器中使用游标

--删除后自己所在的重新排序 CREATE trigger [dbo].[EMTinCar_deleted] on [dbo].[EMTinCar] after delete as decl...
  • u013908405
  • u013908405
  • 2015年09月21日 10:01
  • 395

触发器使用

/* Source of PACKAGE BODY SYS.DBMS_OUTPUT is not available */ / --定义变量 输出变量 declare PI constant ...
  • u012373523
  • u012373523
  • 2013年12月04日 22:51
  • 855

使用AndroidStudio编译NDK的方法及错误解决方案

参考资料: 【android ndk】macos环境下Android Studio中利用gradle编译jni模块及配置:http://demo.netfoucs.com/ashqal/article...
  • asmcvc
  • asmcvc
  • 2014年04月25日 10:34
  • 144579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:触发器使用
举报原因:
原因补充:

(最多只允许输入30个字)