`

Oracle 存储函数和存储过程(PL/SQL子程序)

阅读更多

文章来源:http://www.itnose.net/detail/6033960.html
更多文章:http://www.itnose.net/type/97.html

PL/SQL子程序 包括函数和过程。这里的函数指的是用户自己定义的函数,和系统函数是不同的。子程序一般是完成特定功能的PL/SQL程序块,并且具有一定的通用性,可以被不同的应用程序多次调用。Oracle提供可以把PL/SQL程序存储在数据库中,并可以再任何地方来运行它。这样就叫做存储过程或者是函数。过程和函数的唯一区别就是函数总是向调用者返回数据,而过程则不返回数据。

函数

如果用户要经常执行某些操作,并且需要返回特定的数据,那么就可以将这些操作构造成一个函数。

可以使用SQL语句定义函数。

基本语法:

create or replace function fun_name(argument [in | out | in out ]datatype  ...)
return datatype 
is | as
       -- 需要定义的变量 ,记录类型 , 游标
begin
       --函数的执行体
exception
       --处理出现的异常
end ;

其中,return datatype , 是要返回数据的类型。IN参数标记表示传递给函数的值在函数执行中不改变;OUT标记表示一个值在函数进行计算并通过该参数传递给调用语句;IN OUT 标记表示传递给函数的值可以变化并传递给调用语句。

例:定义一个返回hello 的函数

create or replace function hello
return varchar2 
is
begin
       return 'Hello World';
end ;

执行 ,Function created ,函数创建成功。

函数的调用,与Oracle内置函数的调用相同,可以使用select hello from dual ;进行调用,也可以使用PL/SQL语句进行调用 :

begin 

  dbms_output.put_line(hello);

end ;

例:创建带参数的helloworld函数

create or replace function helloworld(str varchar2)
return varchar2
is
begin
       return 'Hello' || '_' ||str ;
end ;

函数的调用要在函数名称后面加上参数,即:select helloworld('World') from dual ;使用Pl/sql的调用除了加上参数外与上面相同,不在赘述。

例:求一个部门中,员工的工资总数的函数

create or replace function get_sal(dept number)
return number 
is
       v_sum number(10) := 0 ;
       cursor sal_cursor is select sal from emp where deptno = dept ;
begin 
       for c in sal_cursor loop
           v_sum := v_sum + c.sal ;
       end loop ;
       return v_sum ;
end ;

存储过程

存储过程,可以被多个应用程序调用,也可以向存储过程传递参数,向存储过程传回参数。

基本语法

create or replace procedure pro_name(argument [in | out | in out ]datatype  ...) 
is | as
       -- 需要定义的变量 ,记录类型 , 游标
begin
       --函数的执行体
exception
       --处理出现的异常
end ;

例:使用存储过程,求部门的工资总和

create or replace procedure get_sal1(dept number ,sumsal out  number)
is
       cursor sal_cursor is select sal from emp where deptno = dept ;
begin 
       sumsal := 0 ;
       for c in sal_cursor loop
           sumsal := sumsal + c.sal ;
       end loop ;
       dbms_output.put_line(sumsal);
end ;

存储过程的调用:

declare 
  v_sum number(10) := 0 ;
begin 
  get_sal1(30 , v_sum);
end ;

调用格式:

 

CALL | EXCEUTE procedure_name(arg_list) ;

可以使用show error 命令来提示源码的错误位置。使用user_error 数据字典来查看各存储过程的错误位置。

 

删除过程和函数

删除过程

语法如下:

DROP PROCEDURE[USER.]procedure_name ;

删除函数

语法如下:

DROP FUNCTION [USER.]function_name ;

分享到:
评论

相关推荐

    Oracle8i PL/SQL高级程序设计 高清晰版

    共分为7部分(7个pdf文档): 第一部分:PL/SQL介绍及开发环境 ...2.PL/SQL开发和运行环境 3.跟踪和调试 第二部分:非对象功能 4.创建子程序和包 5.使用子程序和包 6.数据库触发器 7.数据库作业和文件输入输出

    PL/SQL 用户指南与参考

    PL/SQL 用户指南与参考 第一章 PL/SQL一览 第二章 PL/SQL基础 第三章 PL/SQL数据类型 ...第八章 PL/SQL子程序 第九章 PL/SQL包 第十章 PL/SQL对象类型 第十一章 本地动态SQL 第十二章 PL/SQL应用程序性能调优

    精通Oracle 10g PL/SQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了大量...

    ORACLE PL/SQL 存储过程 触发器

    ORACLE PL/SQL 存储过程 触发器 ORACLE PL/SQL 存储过程 触发器 子程序 游标

    PL/SQL课件

    PL/SQL简介(第1~2章) PL/SQL中的SQL语句(第3章) 控制结构(第4~7章) 异常处理(第8~10章) 游标(第11~12章) ...子程序和包(第19~22章) Oracle中对象类型(第23章) Oracle提供的包(第24章)

    PL/SQL经典介绍

    第一章 PL-SQL一览 第二章 PL-SQL基础 第三章 PL-SQL数据类型 第四章 PL-SQL的控制结构 ...第九章 PL-SQL子程序 第十章 PL-SQL包 第十一章 PL-SQL对象类型 第十二章 本地动态SQL 第十三章 PL-SQL应用程序性能调优

    ORACLE PL/SQL 基础教程及参考

    它们可以存储在数据库中成为存储过程和存储函数,并可以由程序来调用,它们在结构上同程序模块类似。 PL/SQL过程化结构的特点是: 可将逻辑上相关的语句组织在一个程序块内; 通过嵌入或调用子块,构造功能强大的...

    PLSQL基础word

    PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。  . 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL...

    PL-SQL用户指南与参考

    · 第八章 PL/SQL子程序 2008-04-08 · 第七章 控制PL/SQL错误 2008-04-08 · 第六章 PL/SQL与Oracle间交互 2008-04-08 · 第五章 PL/SQL集合与记录(2) 2008-04-08 · 第五章 PL/SQL集合与记录(1) ...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,...

    Oracle的pl/sql和sqlplus

    1.练习利用SQL*Plus编写、执行PL/SQL程序的命令。 2.记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。...3.练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等。

    PLSQL用户指南与参考.pdf

    目 录 第一章 PL/SQL 一览 第二章 PL/SQL 基础 第三章 PL/SQL 数据类型 ...第八章 PL/SQL 子程序 第九章 PL/SQL 包 第十章 PL/SQL 对象类型 第十一章 本地动态 SQL 第十二章 PL/SQL 应用程序性能调优

    精通Oracle 10g PL SQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了...

    精通Oracle.10g.Pl.SQL编程

    通过学习本书,读者不仅可以掌握PL/SQl的基础编程知识(嵌入SQL语言和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了...

    PL/SQL 基础.doc

    6) PL/SQL: 存储在数据库内运行, 其他方法为在数据库外对数据库访问,只适合ORACLE; 2. PL/SQL 1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言; 2) Oracle客户端工具访问Oracle...

    pl/sql 参考语法,有用

    PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,即构成一个PL/SQL程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套子块。这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上...

    精通Oracle.10g.PLSQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了...

    Oracle_plsql讲义:第22章 创建子程序和包.ppt

    Oracle_plsql讲义:第22章 创建子程序和包.ppt

Global site tag (gtag.js) - Google Analytics