Oracle Database 存储过程


触发器相当于java中的事件监听,当某事件发生时激活特定的事件并执行相应的逻辑

DML触发器中包含了三种事件 insert update delete

语法格式

create [or replace] trigger 触发器名

{before| after | instead of} {insert|delete|update}

on 表名

[for each row]

when 条件

begin

end;

before   在事件开始前执行begin/end

一般应用场合:

1     判断触发事件(一般是一个DML 语句)是否应该被执行 2     在触发事件之前计算一个列的值

after       在事件开始后执行begin/end

一般应用场合:

1         完成触发事件

for each row     表示每操作一次都触发,称作行级,不写表示无论操作多少行,只触发一次,称作表级

when(条件) 必须是行级

小技巧:

触发器中可以使用三个条件词 Inserting,deleting,updating

触发器中可以使用两个变量 :old | :new  分别表示旧有的值和新值,必须是行级(在过程中加:)

instead of 替代触发器: 只能作用在视图上,用于替代DML语句 ,行级,不可与when同用

两个任务:

第一题

创建一张表 create table test(aa number primary key);

执行10次 insert into test values(任意整数) ; 语句

查询此表,结果为 1 2 3 4 5 6 7 8 9 10

第二题

创建一触发器保证每周的周六周日,以及每天早八点前和晚六点后不允许对emp表进行任何的DML(insert,delete,update)操作。

第三题

实现emp表中的外键deptid的级联更新功能

语法格式

create or replace procedure 过程名(参数 参数设置 参数类型) is
        声明语句段;
    begin
        执行语句段;
    exception
        异常处理语句段;
    end;

参数设置

in参数:读入参数,主程序向过程传递参数值。

out参数:读出参数,过程向主程序传递参数值。

in out 参数:双向参数,过程与主程序双向交流数据。

调用存储过程方法

无返回参数  execute 过程名(参数);

有返回参数的要在另一个过程中调用并赋值

13Oracle Database 存储过程的更多相关文章

  1. Windows Azure Virtual Machine (35) Azure VM通过Linked DB,执行SQL Job

    <Windows Azure Platform 系列文章目录> 今天遇到一个Case,客户在使用Azure Automation,执行Azure SQL Database 存储过程的时候, ...

  2. Native SQL的使用

    OPEN SQL也不是万能的,存在一定的局限性.例如后台数据库为Oracle,对数据表中某个字段大小写是不固定的,若以这个字段为查旬条件,一般Oracle处理方法是使用Upper /Lower函数据将 ...

  3. 转:Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    public IEnumerable<Statistic> GetStatistics(IEnumerable<Guid> itemIds) { var ctx = new D ...

  4. [转]Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    本文转自:http://www.cnblogs.com/xchit/p/3334782.html 目前,EF对存储过程的支持并不完善.存在以下问题:        EF不支持存储过程返回多表联合查询的 ...

  5. Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    目前,EF对存储过程的支持并不完善.存在以下问题: EF不支持存储过程返回多表联合查询的结果集. EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况. 虽然可以正常导 ...

  6. Azure sql database 监控存储过程的传参情况

    背景 实施开发的同事找到我,反馈说项目中使用Azure sql database 之后,无法使用Profiler来监控自己开发的存储过程的参数传参情况.确实profiler这些实例级别的工具在Azur ...

  7. Entity Framework 利用 Database.SqlQuery<T> 执行存储过程,并返回Output参数值

    做个记录: var pCount = this._dataProvider.GetParameter(); pCount.ParameterName = "totalCount"; ...

  8. 使用技术手段限制DBA的危险操作—Oracle Database Vault

    概述 众所周知,在业务高峰期,某些针对Oracle数据库的操作具有很高的风险,比如修改表结构.修改实例参数等等,如果没有充分评估和了解这些操作所带来的影响,这些操作很可能会导致故障,轻则导致应用错误, ...

  9. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

随机推荐

  1. JavaScript 获得代码行号和脚本文件名

    如果你使用的是 V8 引擎,Chrome 和 Node.js 所用的,那么你可以利用 JavaScriptStackTraceApi 来获得行号信息,有两个 API: Error.captureSta ...

  2. HDU 5762Teacher Bo

    Teacher Bo Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

  3. caioj1472: 后缀自动机1:多个串的LCS

    子串母串跑合并答案 一个点的fail的dep是比任意一条根到这个点路径长度要小的. 那么改就可以直接来了. #include<cstdio> #include<iostream> ...

  4. [JSOI 2016] 灯塔

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4850 [算法] 首先对不等式进行移项 : hj <= hi + p - sqr ...

  5. mysql将查询结果导出csv文件的方法into outfile

    例句: select * from table_name into outfile '/tmp/tmp.csv' fields terminated by ',';   详解: ① into outf ...

  6. pycharm打开多个项目并存

    问题: 有时我们需要打开多个项目,而现在的做法是:  原有的a项目不动,新打开一个pycharm来打开b项目, 或者 在原有的a项目中打开b项目并覆盖a项目,即a项目与b项目不能共存 需求: 有时我们 ...

  7. 一个单例(Singleton),并说明单例的目的和好处

    单例的目的:保证一个类只有单一的实例,也就是说你无法通过new来创建这个类的一个新实例. 单例的好处:当一个对象在程序内部只能有一个实例的时候,它可以保证我们不会重复创建,而是始终指向同一个对象. S ...

  8. Oracle.ManagedDataAccess.dll

    C#使用Oracle.ManagedDataAccess.dll System.Data.OracleClient程序集没有多大的不同,基本上拿以前使用System.Data.OracleClient ...

  9. source命令用法(转载)

    转自:http://zhidao.baidu.com/link?url=mNfsPHSjTEm7llgyMYx0UVNwkJmD_cxLeHtZnHcM6Ms8LDXofVHka_EzHi6GltbR ...

  10. bzoj 4806: 炮【dp】

    同1801 注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include< ...