pl/sql中的参数模式(r4笔记第54天)
在平时的工作中,可能通过pl/sql传入参数来做一些特定的操作,参数模式一般有In,out.in out这几种
比如dbms_sqltune下的PREPARE_SQLSET_STATEMENT就包含了三种类型的参数
FUNCTION PREPARE_SQLSET_STATEMENT RETURNS VARCHAR2
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SQLSET_NAME VARCHAR2 IN
SQLSET_OWNER VARCHAR2 IN
BASIC_FILTER VARCHAR2 IN DEFAULT
STMT_FILTER BOOLEAN IN DEFAULT
OBJECT_FILTER VARCHAR2 IN DEFAULT
PLAN_FILTER VARCHAR2 IN DEFAULT
RANK1 VARCHAR2 IN DEFAULT
RANK2 VARCHAR2 IN DEFAULT
RANK3 VARCHAR2 IN DEFAULT
RESULT_PERCENTAGE NUMBER IN DEFAULT
RESULT_LIMIT NUMBER IN DEFAULT
ATTRIBUTE_LIST VARCHAR2 IN DEFAULT
ATTRIBUTE_SELECTED BINARY_INTEGER IN/OUT
WRAP_OBJ_CTOR BOOLEAN IN DEFAULT
CHECK_BINDS BOOLEAN IN DEFAULT
STS_ID NUMBER OUT
FIRST_ROWS_HINT BOOLEAN IN DEFAULT
可能猛然接触会对这三种类型有些疑惑,为了能够从对比中说明问题,我会使用如下的pl/sql块做为例子。
例子虽然简单,但是结果却截然不同。
declare
test_value integer;
procedure test_param(t_value in integer)
is
begin
t_value:=t_value+1;
end;
begin
test_value:=100;
test_param(test_value);
dbms_output.put_line('test_value is '||test_value);
end;
/
唯一的不同之处就在于参数类型,分别为in,out,in out
运行的结果如下:
declare
test_value integer;
procedure test_param(t_value in integer)
is
begin
t_value:=t_value+1;
end;
begin
test_value:=100;
test_param(test_value);
dbms_output.put_line('test_value is '||test_value);
end;
/
t_value:=t_value+1;
*
ERROR at line 6:
ORA-06550: line 6, column 1:
PLS-00363: expression 'T_VALUE' cannot be used as an assignment target
ORA-06550: line 6, column 1:
PL/SQL: Statement ignored
declare
test_value integer;
procedure test_param(t_value out integer)
is
begin
t_value:=t_value+1;
end;
begin
test_value:=100;
test_param(test_value);
dbms_output.put_line('test_value is '||test_value);
end;
/
test_value is
declare
test_value integer;
procedure test_param(t_value in out integer)
is
begin
t_value:=t_value+1;
end;
begin
test_value:=100;
test_param(test_value);
dbms_output.put_line('test_value is '||test_value);
end;
/
test_value is 101
in 模式
允许用户将值传送到子程序中
in参数类似于一个常量,所以不能对它赋值
对于第一个例子,执行不成功,这个错误能够说明对于in参数的解释,in参数类似一个常量,不能对它赋值,如果需要对它进行赋值,需要考虑使用out或者in out模式。
out 模式
out参数主要用于子程序返回某些只给子程序的调用者,out参数类似一个没有初始化的变量,使用之前必须初始化
第二个例子。可以看出运行没有问题,但是out参数由于没有在子程序中初始化,所以就默认为null,再做任何运算都是Null了。
如果希望在子程序中生效,需要对它进行初始化。
in out 模式
in out参数如同一个初始化后的变量,可以对它进行读写操作。
这个参数在这个例子中算是功能比较齐全,能够满足我们的需求,可以在子程序test_param对t_value进行修改。 明白了基本点,不能说哪种模式好,只有最合适的。
- im4java + imagemagic 搭建一个图片处理服务
- # Java 一步一步实现高逼格的字符串替换工具(二)
- 专题 | Python编写渗透工具学习笔记二
- Java 一步一步实现高逼格的字符串替换工具(一)
- Python编写渗透工具学习笔记一 | 0x05抓取应用的banner --推断服务
- Logback 简明使用手册
- Python编写渗透工具学习笔记一 | 0x06 Zip包破解程序
- Java 并发排序
- Python编写渗透工具学习笔记一 | 0x07 Python实现键盘记录器
- Python编写渗透工具学习笔记一 | 0x08字典生成程序
- 漫步VR——Unity语音聊天室开发
- Python编写渗透工具学习笔记一 | 0x01 目录扫描程序
- JDK容器学习之HashMap (一) : 底层存储结构分析
- Python编写渗透工具学习笔记一 | 0x02实现一个反弹shell
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 谈谈类加载器
- Android中AlarmManager+Notification实现定时通知提醒功能
- Java垃圾回收相关面试题
- Android中backgroundDimEnabled的作用
- 甲基化相关的习题背景补充
- Android 完全退出的实例详解
- Android 双击Back键退出应用的实现方法
- 2020最全Java面试题--基础篇
- Android开发之背景动画简单实现方法
- 15.深入k8s:Event事件处理及其源码分析
- 说一说 HashMap 底层数据结构
- 详解Android Service 使用时的注意事项
- Android自定义View实现QQ运动积分转盘抽奖功能
- 请简述Spring JDBC是如何进行配置的
- Java高频面试题 -- 静态