Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

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 ;

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

时间: 2024-10-12 10:37:23

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)的相关文章

Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)

触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的表进行的insert .update.delete操作或对视图进行类似的操作. 触发器是很多关系数据库系统都提供的一项技术.在Oracle系统里,触发器类似过程和函数,都有声明,运行和异常 处理过程的PL/SQL块. 触发器的组成: 触发事件:在何种情况下触发:比如:INSERT , UPDATE

PL/SQL学习笔记_03_存储函数与存储过程

ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. 存储函数:有返回值,创建完成后,通过select function() from dual;执行 存储过程:由于没有返回值,创建完成后,不能使用select语句,只能使用pl/sql块执行 一.存储函数 1.存储函数语法格式 CREATE [OR REPLACE] FUNCTION function_name [ (argment [ { IN | IN OUT } ] Type, a

Oracle数据库学习笔记1(11g版本的安装&PL/SQL工具的安装和使用)

1.安装Oracle11g 1.1 .口令就是数据库登录密码,学生党用口令就设置简单点了,违反Oracle口令设置规则也可以继续下一步 1.2 Oracle默认给三个账户用户scott(普通用户),需要在安装界面的时候把锁定取消,后面给上口令密码.SYS用户:超级管理员,权限最高,它的角色是DBA.默认密码是change_on_install.具有创建数据库的权限.我安装的时候口令统一设置了****.SYSTEM用户:系统管理员,权限很高,它的角色是DBA operator,默认密码manage

Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中. 子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 - 执行操作并返回值 子程序的优点: 模块化 将程序分解为逻辑模块 可重用性 可以被任意数目的程序调用 可维护性 简化维护操作 安全性 通过设置权限,使数据更安全 存储过程 过程是用于完成特定任务的子程序. 例如: 一个购票过程可以分为很多个子过程,分别完成. 创建存储过程 创建过程的语法: CREAT

JDBC学习笔记(10)——调用函数&存储过程

如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement *    对象的实例,在使用Connection对象的prepareCall() 方法时,需要传入一个String类型的字符串, *    该字符串用于指明如何调用存储过程 * 2.通过CallableStatement对象的registerOutParameter() 方法注册Out参数 * 3.通过CallableStateme

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

【Oracle学习笔记】

内容主要包含: (1)三种循环及其简化 (2)游标的使用 (3)异常处理 (4)存储过程 (5)存储函数 (6)触发器 (7)其他pl/sql操作 ---------------loop循环定义变量-------------------- declare cursor c1 is select * from emp;# rec emp%rowtype;# i numeber:=1; # v_count number;begin# select count(*) into v_count from

学习笔记之gethostbyaddr函数

刚才学了gethostbyname函数,这个gethostbyaddr函数的作用是通过一个IPv4的地址来获取主机信息,并放在hostent结构体中. #include <netdb.h> struct hostent * gethostbyaddr(const char * addr, socklen_t len, int family);//返回:若成功则为非空指针,若出错则为NULL且设置h_errno //上面的const char * 是UNP中的写法,而我在linux 2.6中看到

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH