存储过程、函数定义的注意事项,超详细,精心测试所得啊,参考价值颇大!共分享!
--=====================================================================================================--前记:
-- 入参(in)、出参(out)、出入参(in out)
-- in:代码块开始时就已经有值,且在代码执行过程中不能更改其值
-- out:代码块开始时其无值,可以在代码块中对其赋值
-- in out:代码块开始时可以有值也可以无值,不管有值没值都可以在代码块中对其重新赋值
-- 函数与存储过程中都可以包含以上参数类型,并且可以包含多个。
--笔记:
--1.函数可以有若干个出参和若干个入参,且必须有一个返回值;存储过程可以有若干个出参和若干个入参,且没有返回值
--2.函数若没有出参,则有两种调用方法:一是用select语用调用;二是在代码块中调用:首先定义一个变量(如a),随后写
-- 代码如下:"a:=函数名(入参1,入参2,....);",以变量(此处为a)接收返回值;另在代码块中还可以写代码如下:“
-- select 函数名(入参1,入参2,....) into a from dual;",但不能写作“select 函数名(入参1,入参2,....) from dual;"
-- 当然在代码块外是可以这么写的。
-- 存储过程若没有出参,则也有两种调用方法:一是用"call 存储过程名(入参1,入参2,....);”调用;二是在代码块中
-- 调用:代码形如"存储过程名(入参1,入参2,....);",如此即完成调用。
--3.函数若有出参,则不能再用select语句调用,上述第2点中提及的所有用select调用的方法都不能再用了,它的调用方法
-- 只剩下一种,即在代码块中(因为必须有一个变量去接收出参):先定义用以接收出参与返回值的变量,再写形如
-- 下的代码调用 "返回值变量名:=函数名(入参1,入参2,....,出参变量名1,出参变量名2,.....);"
-- 存储过程若有出参,则也只剩下一种方法调用,即在代码块中进行调用:方法基本同有出参的函数,只是没有返回值
--4.包中的函数与存储过程都可以运用变量
-- 包中的函数与存储过程可以有多个入参与出参(函数还必须有返回值)
-- 一个包中可以有多个函数与多个方法
--5.包的定义分为两部分:一是包头,其内只定义函数(或存储过程)的名称、参数个数与类型、返回值类型,其实只是定义一个
-- 函数头,类似于java中的接口;二是包体,其内定义函数(或存储过程)的具体实现,书写时要注意几点:(1)第一个函数或
-- 存储过程定义时形如:”as 函数头(存储过程头) as 函数体(存储过程体) end 函数名(存储过程名);"函数头之前的as不可少
-- ,函数头与第二个as之间不能有分号;(2)定义第二个及其之后的函数体(存储过程体)时,代码形如”函数头(存储过程头)
-- as 函数体(存储过程体) end 函数名(存储过程名);",规则同定义第一个时基本相同,只是函数头前不能再有as了
--6.包中的函数与存储过程在调用时都应该加包名,形如:包名.函数名(或包名.存储过程名)。
--=====================================================================================================
此是我作测试时的例子,仅供参考
Oracle--包、存储过程与函数.rar
(2.49 KB)