暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库扩展语言PL/SQL之子程序

数据仓库 2020-08-14
405

点击蓝字关注我吧


【本文详细介绍了Oracle数据库扩展语言PL/SQL中子程序的基本概念和使用方法,欢迎读者朋友们阅读、转发和收藏!】

1 PL/SQL 可以分为匿名块和命名块

匿名块的典型特色就是以 BEGIN 或 DECLARE 开始,每次执行时都必须重新编译,它们不能被存储到数据库字典中,因此其他的语句块不能像调用普通的函数一样调用匿名块。

命名块包含 PL/SQL 子程序 ( 存储过程或函数 ) 、包和触发器。命名块没有匿名块的这些限制,它们可以存储到数据库中,可以被其他的块调用,不需要再每次执行时都重新编译。

2 子程序简介:一般来说存储过程和函数被称为子程序

存储过程是一段不具有返回值的代码块,而函数会返回一个值。子程序与匿名块最大的不同是它可以存储到数据库字典中,以便重用。由于子程序属于命名块,因此在定义时需要指定一个名字,子程序其他的部分与匿名块非常相似。

3 创建存储过程

CREATE OR REPLACE Procedure_name

使用 CREATE 在数据库字典中创建一个独立的过程, OR REPLACE 表示创建时将替换现有的过程定义,通常使用 OR REPLACE 以便在过程创建之后进行修改,可以直接替换掉原有的过程。

PROCEDURE 表示将要创建一个过程,一般在包中定义过程时会省略掉 CREATE OR REPLACE 子句。

Procedure_name 是存储过程的名字,名字不能重复。

存储过程参数名称统一以 p 开头,这只是一种约定,并不是原则。

IN 关键字用来指明参数为输入参数,参数的类型并没有指定长度。

AS 之后的语句是局部定义区,在示例中定义一个变量和异常。类似于匿名块的 DECLARE 。

4 创建函数

创建函数和存储过程 非常类似,区别在于函数会具有返回值,存储过程仅仅是为了执行一系列的行为。

调用时,函数可以作为表达式的一部分进行调用,而存储过程只能作为 PL/SQL 语句进行调用。

CREATE OR REPLACE FUNCTION function_name

创建函数关键字使用 FUNCTION

RETURN 返回指定类型

5 RETURN

存储过程也可以使用 RETURN ,但是这个是作为退出存储过程的执行函数的 RETURN 是返回值的。

6 子程序参数

1 、形参和实参

形式参数:在定义子程序时,在定义语句中定义的参数称为形式参数,简称形参。

实际参数:在调用子程序时,传入的具体参数值称为实际参数,简称实参。

2 、参数模式 (3 种类型模式 )

分为 3 种模式:IN 、 OUT 和 IN OUT ,如果没有指定形式参数的模式,默认为 IN 。

IN 模式:称为输入参数,这是默认的参数模式。

OUT :称为输出参数,输出参数将会改变参数的值,因此实际参数不能用文字或者常量来表示。

IN OUT 模式:IN OUT 模式是 IN 和 OUT 方式的组合,又称输入 / 输出参数。当过程被调用时,参数既作为传入的参数,后经过赋值后返回又可以作为返回参数。

3 、形式参数的约束

在创建存储过程定义时,形式参数不能指定长度、精度约束,否则会报错。

虽然形式参数不能使用约束声明,但是可以使用 %TYPE 对其进行约束。参数的约束是产生在形式参数中的。

4 、参数传递方式

调用子程序时,可以有两种向子程序传递参数的方式:一种是按位置传递,另一种是按名称传递。

使用按名称传递方法,使用 => 作为关联的操作符,把左边的实参和右边的形参关联起来。

5 、参数默认值

在定义子程序过程中,可以使用 DEFAULT 关键字或赋值语句为 IN 模式参数指定默认值。

6 、使用 NOCOPY 编译提示

使用 NOCOPY 编译提示前,首先理解引用传递和值传递之间的区别。

值传递:当参数通过值传递时,参数将从实际参数中被复制到形式参数中。

引用传递:实际参数的指针被传递到了相应的形式参数中。

在使用 OUT 和 IN OUT 模式的参数时,如果参数是大型数据结构,比如集合、记录和对象实例,进行全部复制会大大降低执行速度,消耗大量内存,为了防止这种现象可以使用 NOCOPY。

我知道你在看

文章转载自数据仓库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论