Oracle笔记 十一、PL/SQL函数和触发器

--创建函数
create or replace function add_sal(sSal number)
       return number
is
begin
  if (sSal > 5000) then
    return sSal + 51;
  elsif (sSal > 3000) then
    return sSal + 111;
  else
    return sSal + 222;
  end if;
end;
 
select sal, add_sal(sal) from emp;
 
 
--触发器
create table deptLog(
       uName varchar2(20),
       action varchar2(20),
       dTime date
);
 
--创建触发器
--for each row 可以触发多条,当你的语言影响多少条记录就会触发多少次
create or replace trigger trig_dept2
  after insert or delete or update on dept2/* for each row*/
begin
  if inserting then
    insert into deptLog values(user, ‘insert‘, sysdate);
  elsif updating then
    insert into deptLog values(user, ‘update‘, sysdate);
  elsif deleting then
    insert into deptLog values(user, ‘delete‘, sysdate);
  end if; 
end;
 
select * from dept2;
select * from deptLog;
insert into dept2 values(55, ‘SOFTWARE‘, ‘cic‘);
update dept2 set loc = ‘go‘ where deptno in(30);
delete dept2 where deptno = 55;
 
--触发器
create or replace trigger trig_emp
  after update on dept for each row
begin
  update emp set emp.deptno =: new.deptno where emp.deptno = :old.deptno;
end;
 
update dept set deptno = 11     where deptno = 10;
select * from emp;
 
---语句级触发器
create or replace trigger trg_ins_dept2
before insert
on dept2
begin
     if user not in(‘SCOTT‘) then      
       raise_application_error(-20001, ‘只有SCOTT才能修改该表!‘);
     end if;
end;
 
禁用、启用触发器
alter trigger tgr_Name disable | enable;
alter table tableName disable all trigger | enable all trigger;
时间: 2024-10-27 01:16:56

Oracle笔记 十一、PL/SQL函数和触发器的相关文章

Oracle 11g 的PL/SQL函数结果缓存

模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数. C:\Documents and Settings\guogang>sqlplus gg_test/[email protected]_gg SQL*Plus: Release 10.2.0.1.0

Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包  程序包 /* 程序包:对相关存储过程,函数,变量,游标和异常等对象的封装 有声明和主体组成 优点:1.模块化:2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳 */ --程序包的声明:关键字:package is end create or replace package my_pack as procedure packageTest(v_num number); end my_pack;--也可以是 end; --程序包的主体 create or re

ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引

WHEN子句说明触发约束条件.Condition为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL函数.WHEN子句指定的触发约束条件只能用在BEFORE和AFTER行触发器中,不能用在INSTEAD OF行触发器和其它类型的触发器中. -- 创建记录操作事件的表 CREATE TABLE event_table( event VARCHAR2(50), time DATE ); -- 创建触发器 CREATE OR REPLACE TRIGGER tr_star

Oracle数据库之PL/SQL触发器

1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行.触发器经常用于加强数据的完整性约束和业务规则等. ORACLE触发器有三种类型,分别是:DML触发器.替代触发器和系统触发器. DML触发器 顾名思义,DML触发器是由DML语句触发的.例如数据库的INSERT.UPDATE.D

Oracle数据库之PL/SQL过程与函数

Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编译后再次

每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQL程序设计终极指南>志在打造PL/SQL领域最为系统.全面.实战.权威的著作,通过一系列非常突出的优势在大量的同类书中脱颖而出,成为该领域的标准读物. PL/SQL本身涉及的知识点浩瀚.庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核

Oracle数据库之PL/SQL程序设计简介

有利于客户/服务器环境应用的运行 对于客户/服务器环境来说,真正的瓶颈是网络上.无论网络多快,只要客户端与服务器进行大量的数据交换,应用运行的效率自然就回受到影响.如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器执行,自然就省去了数据在网上的传输时间. 适合于客户环境 PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL.对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL

Oracle 客户端安装 + pl/sql工具安装配置

Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 10g下载地址为: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 根据自己机器或者oracle服

《oracle每日一练》免安装Oracle客户端使用PL/SQL

免安装Oracle客户端使用PL/SQL Oracle客户端挺招人烦的,部署连接它的应用通常需要先安装它的客户端,安装程序要求在目标机器上写注册表,假设你没有洁癖的话,你仍可能被下面的事情绊住:当你的机器上的其他程序依赖于x64的Oracle的程序,并且它们很有可能根本不是你写的,因此你还不敢随便乱动服务器,但是你可能需要一个PL/SQL用来在相同的环境下执行查询,这个时候你还是需要一个免安装的办法来处理这个问题. 1.下载Oracle Instant Client (32-bit) 因为我的P