oracle 存储过程、函数和触发器用法实例详解

来源:脚本之家  责任编辑:小易  

三者差别: 1、存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。; 2、存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用; 3、触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执

本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下:

触发器脚本中createTable_Sp();中没有用变量获取返回参数 修改成 data_file varchar(4000); tablespace_name varchar(4000); v_sql varchar(4000); createTable_Sp(data_file ,tablespace_name ,v_sql );

一、存储过程和存储函数

一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。

存储过程,可以返回多个值,函数只能一个;触发器是一个特殊的存储过程。当他满足一当条件时执行,例子:如果几个有关联的表,其中主表的数据删除了~那么子表的也要一起删掉。这情况可以用触发,当主表数据删除时触发其它的操作。

创建存储过程

代码如下: CREATE OR REPLACE TRIGGER tri_aft_ins_a AFTER INSERT ON a FOR EACH ROWDECLAREBEGIN INSERT INTO B (suser, scontent, createTime, nispublic, smoduleId) VALUES (:NEW.screateUser, :NEW.nid, :new.screatetime, 0, 'report');

用CREATE PROCEDURE命令建立存储过程。

大部分微信用户应该都知道,微信好友将我们删除或者拉黑他都不会从我们的微信中消失。并且当你被删除或者拉黑,微信是不会发消息通知你的。那么我们要如何确定自己被微信好友拉黑或者删除呢?确定自己被微信好友拉黑或者删除的方法有哪些?拉黑和删除的区别有又是什么?下面下边就为大家科普一下有关微信好友拉黑和删除的小知识。拉黑好友:对方将你拉黑之后,双方都还存在在对方的微信之中,并且两人之间的微信好友关系并未解除。当被拉黑的人发送消息给拉黑的人,显示的消息为拒收,而你却可以接收到被拉黑的热所发送的消息。这么说可能有点绕口。通俗点来说,就是拉黑你的人单方面切断了与你的联系。删除好友:删除好友则是两人完完全全的解除

语法:

鹿晗帅啊。这个应该是显而易见的吧,如果视力和审美正常的话,鹿晗这个长相绝对是帅的。然而鹿晗的帅是属于很清秀的帅,五官过于精致,就像女生一样,所以总会有些人跳出来,拿他的长相说事,说鹿晗不像个男人。我想说这还是挺可笑的,因为嘲笑别人长相清秀的人,一般都不好看,这个不好看不仅体现在外表,同样也体现在心灵。我想说,如果你想评判一个人,就不要从表面上评价,也不要听风就是雨,你需要做的是,了解之后再评价这个人,这样才能客观。也许你了解鹿晗之后,就不会觉得他娘,因为他是一个纯爷们。

create [or replace] procedure 过程名(参数列表) as PLSQL子程序体;

如果不能升迁,比如做主管,架构师之类,就要准备好退路了,年纪大了,没那么多精力加班,我也是一名程序员,不过我转型较早,现在自己开一家软件公司,手下几个技术员,做了几年定制,感觉压力太大,现在转型做SaaS,综合几年下来客户的需求,保留了几套通用型比较强的软件,搞批量销售,不再做定制化软件,除非价格高!年纪大了后,不管哪个行业,都是要换一种思维赚钱,比如被动收入,就是躺着也能赚钱,对于程序员来说,我这有几个比较好的思路,开发一些细分行业的小软件,最好是网络版的,就是不卖源码,只是给你开账号使用,然后做好宣传,在线支付,有用户要用,就可以直接付款使用,可以按年,也可以按月,然后产品做好了,你的大部

--给指定员工涨工资 create procedure addSal(empid in number) as psal emp.sal%type; begin select sal into psal from emp where empno=empid; update emp set sal = sal * 1.1 where empno=empid; dbms_output.put_line(empid || '涨工资前' || psal || '涨工资后' || (psal * 1.1)); end;

首先,你拿这玩意儿来做什么?膜拜?祈福?加持?好玩?增值?还就纯粹一串珠子差这个配饰?玩玩意儿,我们首先要确定一点它值不值得玩,怎么来看?那就是一个最简单的标准:美不美?!材质美不美?工艺美不美?颜色美不美?这几条件凑一块儿就极具可玩性了,就算工艺美术品,再加点时间,就是古董了。至于天珠,我没看到任何价值和美在里面,所以,抱持平和心态,别被神棍、商人忽悠了,再加点宗教情怀里面,大师一开光,自己再一感动,成千上万的血汗钱就为自己的智商交了税。做人,自己秉持一颗善心就好,不需要外在和表象来自己忽悠自己。

调用存储过程

--方法一 begin addSal(7369); end; --方法二 exec addSal(7369);

存储函数

函数为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个return子句,用于返回函数值。函数说明要指定函数名,结果值的类型,以及参数类型等。

创建语法:

CREATE [OR REPLACE] FUNCTION 函数名 (参数列表) RETURN 函数值类型 AS PLSQL子程序体;

--查询指定员工的年收入 create function queryEmpSal(empid in number) return number as psal emp.sal%type; pcomm emp.comm%type; begin select sal,comm into psal,pcomm from emp where empno=empid; return (psal*12) + nvl(pcomm,0); end;

函数的调用

declare psal number; begin psal:=queryEmpSal(7369); dbms_output.put_line(psal); end;

begin dbms_output.put_line(queryEmpSal(7369)); end;

过程和函数中的IN和OUT

一般来讲,过程和函数的区别在于函数可以有一个返回值,而过程没有返回值。

但过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。

什么时候用存储过程或函数?

原则:如果只有一个返回值,用存储函数,否则,就用存储过程。

创建包和包体

什么是包和包体?

包是一组相关过程、函数、变量、常量、类型和游标等PL/SQL程序设计元素的组合。包具有面向对象设计的特点,是对这些PL/SQL程序设计元素的封装。

包体是包定义部分的具体实现。

包由两个部分组成:包定义和包主体。

--包定义 create [or replace] package 包名 as [公有数据类型定义] [公有游标声明] [公有变量、常量声明] [公有子程序声明] end 包名;

--包主体 create [or replace] package body 包名 as [私有数据类型定义] [私有变量、常量声明] [私有子程序声明和定义] [公有子程序定义] begin PL/SQL子程序体; end 包名;

--创建mypackage包 create or replace package mypackage as procedure total(num1 in number, num2 in number, num3 out number); end mypackage;

--mypackage包体 create or replace package body mypackage as --计算累加和的total过程 procedure total(num1 in number, num2 in number, num3 out number) as tmp number := num1; begin if num2 < num1 then num3 := 0; else num3 := tmp; loop exit when tmp > num2; tmp := tmp + 1; num3 := num3 + tmp; end loop; end if; end total; end mypackage;

(*注意:包定义和包体要分开创建)

调用包

declare num1 number; begin mypackage.total(1, 5, num1); dbms_output.put_line(num1); end;

更多关于Oracle相关内容感兴趣的读者可查看本站专题:《Oracle常用函数汇总》、《Oracle日期与时间操作技巧总结》及《php+Oracle数据库程序设计技巧总结》

希望本文所述对大家Oracle数据库程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

求,oracle,存储过程,函数,块,触发器,全套教学视频

去百度传课上搜大饼plsql,讲的非常好,就是更新慢,

Oracle的存储过程、触发器怎么描述?

1:什么叫存储过程?

在oracle中,可以在数据库中定义子程序,这种程序块叫存储过程(procedure),它存放在数据字典中,可以在不同用户和应用程序*享,并可以实现程序的优化和重用。

2:存储过程的优点?

 过程运行在服务器端,执行速度快

 过程执行一次后代码就驻留在高速缓存中,在以后的操作中,直接调用缓存数据。

 确保数据库的安全性,可以不授权用户直接访问应用程序中的一些表,而是授权用户执行访问数据库的过程。

 自动完成需要预先执行的任务,过程可以在系统启动时自动运行。、

3:存储过程的创建和执行

用户存储过程只能定义在当前数据库中,可以使用sql语句或OEM创建。

默认情况下,用户创建的存储过程归登录数据库的用户所拥有,DBA可以把许可授权给其他用户。

Sql命令创建存储过程

CREATE procedure 过程名

【(parameter parameter_mode date_type,….n)】

IS| AS

BEGIN

SQL_STATEMENT

END 过程名

其中

Parameter表示过程的参数。

parameter_mode:参数的类型,过程参数和函数参数一样,有三种类型IN,OUT,IN OUT

IN 表示参数是输入给过程的。

OUT表示采纳数载过程中被赋值,可以传给过程的外部。

IN OUT表示可以传内,可以传外。

调用存储过程

直接输入存储过程的名字可以执行一个已经定义的存储过程。

存储过程的编辑修改

修改存储过程虽然可以和修改视图一样,用ALTER procedure,但是他是用来重新编译和验证用的,如果要修改过程定义,建议还是用create or replace。

存储过程的删除

当某个过程不再需要的时候,应该将其从内存中删除,以释放它占用的资源。

Drop procedure 存储过程名。

Drop procedure update_info.

触发器

触发器(trigger)是一些过程,与表联系紧密,用于保护表中的数据,当一个基表被修改时,触发器自动就会执行。例如出入其可以实现多个表间数据的一致性和完整性。

一般情况下,对表数据的操作有增删查改,维护数据的触发器也可以分为多种,每张基表最多可以建立12个触发器。

1:Before insert 2:before insert fo each row; 3:after inert

4:after insert for each row 5:before update 6:before update for each row

7:after update 8:after update for each row; 9:before delete;

10:before delete for each row 11:after delete 12:after delete for each row.

利用sql语句创建触发器

语法规则

Create or replace trigger 触发器名

{before| after| instead of}

{delete 【or insert】【or update】【of column ….n 】}

On 表名|视图名

【for each row 】[]where condition]]

Sql_statement[,,,n]

参数说明

Instead of :指定在创建替代触发器。

Of column 指定在哪些列上进行触发。。。

创建触发器的*

1:触发器中有效的语句可以包括DML语句,但是不能包括DDL,rollback,commit

,savepoint都不适用。

oracle触发器中可以调用函数或存储过程吗

oracle触发器中可以调用函数或存储过程。

数据库存储过程、函数、触发器的区别

存储过程和函数的区别:

1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。

3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

触发器、存储过程和函数三者有何区别:

触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行;

在什么时候用触发器?要求系统根据某些操作自动完成相关任务。

什么时候用存储过程?

存储过程就是程序,它是经过语法检查和编译的SQL语句,所以运行特别快。

存储过程和用户自定义函数具体的区别

先看定义: 存储过程存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。

存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中。

oracle中怎么使用触发器或存储过程来汇总数据

需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。

  • 本文相关:
  • oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)
  • oracle存储过程返回游标实例详解
  • oracle 在一个存储过程中调用另一个返回游标的存储过程
  • oracle存储过程入门学习基本语法
  • oracle中 关于数据库存储过程和存储函数的使用
  • oracle如何恢复被覆盖的存储过程
  • oracle数据库中查看系统存储过程的方法
  • oracle 存储过程和函数例子
  • oracle 存储过程总结 二、字符串处理相关函数
  • oracle存储过程和存储函数创建方法(详解)
  • oracle存储过程和自定义函数详解
  • oracle学习记录之使用自定义函数和触发器实现主键动态生成
  • oracle 配置远程访问教程
  • oracle9i在win2k环境下的完全卸载
  • windows sever 2012下oracle 12c安装配置方法图文教程
  • linux下修改oracle监听地址的方法
  • oracle实现自定义序列号生成的方法
  • 浅谈oracle中单引号转义
  • oracle创建设置查询权限用户的方法
  • 有关oracle数据库的备份情况
  • oracle中dblink的实际应用示例详解
  • 直接拷贝数据文件实现oracle数据迁移
  • 求,oracle,存储过程,函数,块,触发器,全套教学...
  • Oracle的存储过程、触发器怎么描述?
  • oracle触发器中可以调用函数或存储过程吗
  • 数据库存储过程、函数、触发器的区别
  • oracle中怎么使用触发器或存储过程来汇总数据
  • 数据库存储过程、函数、触发器的区别是什么?
  • oracle 存储过程与触发器
  • 存储过程和触发器以及自定义函数的区别
  • 存储过程,函数和触发器的区别?
  • oracle,触发器或者存储过程实现,表A插入一条记录...
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved