过程和函数统称为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. 要理解javascript中间apply和call

    apply和call它是javascript一个非常重要的方法,.虽然与程序平时很少接触,但JS到处都在使用这个框架2方法. 2个方法是在Function.prototype中.也就是说每一个JS函数 ...

  2. Git 版本回退问题详解

    版本回退 git log    ,  git reset --hard xxxx回退到以前的版本 git reflog,  git reset --hard xxx 回退到将来的版本 现在,你已经学会 ...

  3. [汇编学习笔记][第十三章int指令]

    第十三章int指令 13.1 int指令 格式: int n, n 为中断类型码 可以用int指令调用任何一个中断的中断处理程序(简称中断例程). 13.4 BIOS和DOS 所提供的中断例程 BIO ...

  4. ASP.NET 导出Excel文档

    System.IO.TextWriter writer = new System.IO.StreamWriter(Server.MapPath("/provprice.xls"), ...

  5. ASP.NET实现IE下禁用浏览器后退按钮办法

    在page_load方法里面增加如下代码: Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Parse("2010-1 ...

  6. 提示框的优化之自定义Toast组件之(二)Toast组件的业务逻辑实现

    在java下org.socrates.mydiary.activity下LoginActivity下自定义一个方法showCustomerToast()  public class LoginAct ...

  7. Oracle CASE WHEN 用法介绍[Z]

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  8. 使用do...while的方法输入一个月中所有的周日

    do{ var date = Number(prompt('请输入一个月的总天数')); var start = (prompt('请输入一个月的一号是周几')); for(var i=0;i< ...

  9. virtual box 改变已经创建的虚拟系统分配的硬盘

    启动cmd,进入virtualbox安装的目录 :cd E:\Program Files\Oracle\VirtualBox 然后输入VBoxManage.exe list hdds ,可以看到 D: ...

  10. Ubuntu14.10下解决chromium浏览器无法安装adobe flash的问题

    本文参考了一下资源和博客,在此提出表示感谢: http://my.oschina.net/u/209016/blog/290067 http://ubuntuhandbook.org/index.ph ...