过程和函数统称为PL/SQL子程序,通过输入、输出参数或输入/输出参数与其调用者交换信息。他们是被命名的PL/SQL块,被编译后存储在数据库中,以备执行。因此,可以在数据库中直接按名称使用它们。

1、创建过程

[ ]里的部分是可选的

 CREATE [OR REPLACE] PROCEDURE procedure_name
(arg1 [ { IN | OUT | IN OUT }] type1 [DEFAULT value1],
[arg2 [ { IN | OUT | IN OUT }] type2 [DEFAULT value2]],
......
[argn [ { IN | OUT | IN OUT }] typen [DEFAULT valuen]]) IS | AS
<类型.变量的声明部分>
[name VARCHAR2 (30);]
BEGIN
<执行部分> EXCEPTION
异常处理部分 END [procedure_name];

注:可以向存储过程传递参数,也可以向存储过程传回参数。IN,OUT,IN OUT是形参的模式。若省略,则为IN模式。IN模式的形参只能将实参传递给形参,进入函数内部,但只能读不能写,函数返回时实参的值不变。OUT模式的形参会忽略调用时的实参值(或说该形参的初始值总是NULL),但在函数内部可以被读或写,函数返回时形参的值会赋予给实参。IN OUT具有前两种模式的特性,即调用时,实参的值总是传递给形参,结束时,形参的值传递给实参。调用时,对于IN模式的实参可以是常量或变量,但对于OUT和IN OUT模式的实参必须是变量。

2、调用过程

 exec procedure_name;
call procedure_name;

注:这两种方法都可以使用,但是exec为sqlplus命令,只能在sqlplus中使用,call为sql命令,没有限制。

例子:

 CREATE OR REPLACE PROCEDURE jc_student_up_class (xh IN VARCHAR2,msg OUT VARCHAR2)
AS
c_bjid VARCHAR2 (100);
BEGIN
msg :='';
--取 该学生 所属专业的 第一个 有名额的班级 且 有床位(性别)
select classlist_id into c_bjid from (
select a.*, decode(b.rs,null,0,b.rs) rs from gy_classlist a
left join ( select CLASSID,count(1) rs from yx_student group by CLASSID ) b on a.classlist_id = b.CLASSID
where rxnf = extract(year from sysdate)
and a.majorsetid = ( select zyid from yx_student where xh = c_xh )
--判断 该班级 改性别 还有床位
and exists (....) )
where rsxz >rs and rownum =1 ; -- 判断 若存在班级 则插入
if not c_bjid is null then update yx_student set CLASSID =
(select classlist_id from gy_classlist where classlist_id = c_bjid ) where xh = c_xh;
commit;
end if; EXCEPTION
when NO_DATA_FOUND THEN msg :='-1'; END jc_student_up_class;

以上是定义的一个给学生分配班级的存储过程,以xh(学号)为输入参数,msg为返回参数,如果执行成功则返回"0",否则返回"-1"。

3、删除过程

 DROP PROCEDURE  procudure_name;

4、函数

 CREATE [OR REPLACE] FUNCTION function_name
......
--后面与过程相同

使用过程与函数的区别:

1、过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值。

2、可以SQL语句内部(如表达式)调用函数来完成复杂的计算问题,但不能调用过程。

Oracle学习笔记(2)——过程和函数的更多相关文章

  1. 吴裕雄--天生自然ORACLE数据库学习笔记:过程、函数、触发器和包

    create procedure pro_insertDept is begin ,'市场拓展部','JILIN'); --插入数据记录 commit; --提交数据 dbms_output.put_ ...

  2. Oracle学习笔记六 SQL常用函数

    函数的分类 Oracle 提供一系列用于执行特定操作的函数 SQL 函数带有一个或多个参数并返回一个值 以下是SQL函数的分类:

  3. Oracle学习笔记(6)——函数

    函数的作用 方便数据的统计 处理查询结果 函数的分类 Oracle内置的系统函数 数值函数 四舍五入                                             ROUND ...

  4. oracle学习笔记(六)——函数&存储过程的异同

    我看的书上除了能看出来函数有返回值,存储过程没有,其他啥也看不出来... 网上大大的总结

  5. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  6. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  7. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  8. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  9. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

随机推荐

  1. pyqt QTreeWidget例子学习

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from Py ...

  2. 图的最小生成树(Prim、Kruskal)

    理论: Prim: 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合.算法从U={u0}(u0∈V).TE={}开始.重复执行下列操作: 在所有u∈U,v∈V-U的边(u,v)∈E ...

  3. python学习之路-6 冒泡算法、递归、反射、os/sys模块详解

    算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...

  4. java BingInteger生成2进制String循环移位时长度自动缩减

    最近在做文本处理,使用MD5 生成一段文字的MD5哈希长度为32位也即128个0-1序列. 由于需要对这个MD5值进行循环移位,显然普通的  int 是不行的,所以使用 BigInteger.但是在使 ...

  5. CI分支kohana在线文档

    http://www.luzhongpeng.com/guide/kohana/mvc/controllers http://www.lampblog.net/kohana3%E4%BD%BF%E7% ...

  6. CLR via C# - 基础拾遗

    编译器开关设置 IL代码质量 JIT本地代码质量 /optimize- /debug-(默认设置) 未优化 优化 /optimize- /debug+(full/pdbonly) 未优化 未优化 /o ...

  7. web.cofing(新手必看)

    花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...

  8. UML学习-活动图创建

    活动图(Activity Diagram)可以实现对系统动态行为的建模,主要是将用例细化,即用例内部的细节可以以活动图的方式描述.活动图描述活动的顺序,主要表活动之间的控制流,是内部处理驱动的流程,在 ...

  9. UIImage加载图片的区别和渲染模式

    前言 关于本地图片UIImage的加载问题,还是需要注意的.不同的加载处理方式,在效率和性能上还是有差异的. 今天,我们来讲讲UIImage的加载应该选择什么样的API来加载! 两种API 这两种AP ...

  10. 转:Dictionary<int,string>怎么获取它的值的集合?急!急!急!

    怎么获取Dictionary<int, string>的值?我知道这个是键值对的,我知道可以根据key得到value,但关键是现在连key也不知道啊就是想让这个显示在listbox中,应该 ...