目录
带 OUT 参数的存储过程
输入一个编号,查询数据表 emp中是否有这个编号,如果有返回对应员工姓名,如果没有,则提示没有对应员工
使用 EXEC 命令或者 PRINT执行含有 OUT参数的存储过程
使用 PL/SQL 块编辑程序调用含有 OUT 参数的存储过程
带 IN OUT 参数的存储过程
使用 IN OUT 参数,创建一个存储过程,计算传入数值的绝对值
使用 PL/SQL 块编辑程序调用含有 IN OUT参数的存储过程
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
带 OUT 参数的存储过程
上一部分介绍的是使用 IN参数可以向存储过程中的程序单元输入数据,在调用的时候提供参数值,被存储过程读取,
然而有的时候程序单元运行的结果可以传递到外部,例如查询数据表内容从程序中送到外部调用。
这个时候可以使用 OUT参数,在存储过程中定义这种参数时,关键字 OUT 写在参数名称之后。
下面通过具体范例来看一下如何使用。
输入一个编号,查询数据表 emp中是否有这个编号,如果有返回对应员工姓名,如果没有,则提示没有对应员工
分析:
这个示例在上一部分中是使用IN参数定义一个输入,然后定义局部变量,查询的结果是送到局部变量中,
在程序体中显示。现在我们就使用 OUT参数,将结果从程序中送到外部调用处。
存储过程代码如下图所示
如上所示,在存储过程中定义了两个参数,参数var empno 是 IN 参数,接收来自外部数值,参数var_ename 是 OUT参数,在程序内接受查询的结果,
然后通过这个参数传递到调用者。上面介绍了 OUT参数的使用,那么如何调用含有 OUT参数的存储过程呢?
它不像不含参数和包含IN 参数的存储过程,无法直接调用。
含有 OUT参数的存储过程在调用之前,必须定义一个相应类型的变量。
下面通过两种方法演示调用的方法
使用 EXEC 命令或者 PRINT执行含有 OUT参数的存储过程
在使用命令之前,必须使用 VARIABLE 关键字声明对应变量,来存储 OUT参数相应的返回值。
例如上面这个过程中有一个 OUT参数 var name,应先定义对应的变量,如下图所示。
如上图所示,调用的时候,使用“:”后面紧跟变量名。
可以看出,当输入的 IN 参数数值是“7389’的时候,提示“没有对应此编号的员工”;当输入的 IN 参数数值是“7369”的时候,
数据表中是存在这条记录的,因此返回所查询的结果。
但是我们看到程序并没有显示结果,而是显示“PL/SQL过程已成功完成”。
那么如何显示结果呢,可以使用如下方式。
SELECT :var_name FROM dual;
即可以显示出所返回 OUT参数对应变量的结果。
此外,还可以使用 PRINT命令打印变量的内容,如下所示
PRINT var_name
使用 PL/SQL 块编辑程序调用含有 OUT 参数的存储过程
因为存储过程中还有 OUT参数,因此调用之前要定义相应的变量,以接受调用后传送过来的运行结果。
程序代码及结果如下图所示。
如上图所示,在调用的 PL/SQL块中,定义了变量以获取返回的 OUT参数的查询结果,然后在程序中显示。
带 IN OUT 参数的存储过程
通过前面的范例可以看出,IN 参数接收来自外部调用的数值,在程序内部不能修改;而 OUT参数在存储过程中获得运行结果,
通过外部调用把结果送出,但不能接收来自外部的值。IN OUT参数同时具有 IN 参数和 OUT参数的特点,
既可以接收来自外部的值,也可以在存储过程中被修改,把获取的内容传递到外部调用的变量中。
下面通过一个范例来看一下它的使用。
使用 IN OUT 参数,创建一个存储过程,计算传入数值的绝对值
分析:
我们可以在存储过程中只定义一个参数,设置该参数为IN OUT 参数,接收来自外部调用的然后在存储过程中计算其绝对值并把结果放到该参数中。
程序代码及运行结果如下图所示
如上图所示,存储过程内容很简单,定义了一个IN OUT参数 var_num 变量,该变量接收来自外部的变量值,然后在存储过程中计算绝对值,再把结果返回到该参数中。
下面就介绍一下如何调用。
调用的方法也有两种,我们分别来看一下(1)使用 EXEC 命令或者 PRINT 执行含有 IN OUT 参数的存储过程同样,
在使用 EXEC 命令或者 PRINT之前,要定义一个变量以对应存储过程中的 IN OUT 参数。调用代码如下所示。
如上图所示,实现了在存储过程中计算传入数值的绝对值并通过同一参数把结果传回。
使用 PL/SQL 块编辑程序调用含有 IN OUT参数的存储过程
同样,在 PL/SQL块中要定义对应于 IN OUT参数的变量,然后再调用该存储过程。
程序代码如下图所示。