IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 金仓数据库oracle模式下的in out inout三种参数模式 -> 正文阅读

[大数据]金仓数据库oracle模式下的in out inout三种参数模式

Oracle的inout参数模式

Oracle中存储过程与函数都可以有参数,参数的类型可以指定为in、out、in out三种模式。
IN :用于传入参数
在调用过程的时候,实参传到该过程中
在过程内部,形参会被看做只读且不能更改的
在过程执行完毕,返回调用环境时候,实参到的值也不会改变
OUT:用于返回值
在调用过程时候,会忽略传入的形参的值,形参像未初始化的变量,值为null
形参可以读取和写入
在过程执行之后,返回调用环境(只有程序正常结束时),会将形参赋值给实参
IN OUT: 用于传入参数和返回值
在调用过程的时候,实参值会传递到过程中
在过程执行之后,返回调用环境(只有程序正常结束时),会将形参复制给实参

金仓数据库的inout参数模式

金仓数据库为了兼容oracle,在oracle模式下支持IN、OUT、IN OUT 三种参数模式:
官方的文档描述如下:
KingbaseES 存储过程和函数提供了 IN、OUT、IN OUT 三种参数模式,分别对应输入、输出、输入输出三种语义。 IN参数将值传给被调用的子程序; OUT/INOUT参数调用时需传入变量,调用后实参变量的值将被修改。不声明参数模式时,缺省为 IN 类型。
KingbaseES支持模式的参数与主流的数据库和 SQL 的标准规范相比,KingbaseES 与他们的差别如下:
在这里插入图片描述
下面通过实例去了解

1、in参数模式

不指定时,默认是IN参数模式,支持赋值创建
函数同存储过程表现一致,用函数举例

create or replace function in_t000(i int) return void as 
begin
	i = i + 1;
        raise notice 'i = %', i;
end;

通过匿名块进行调用,查看结果
在这里插入图片描述
从以上函数示例可以看出:
1、在调用函数的时候,实参传到该函数中
2、在函数内部,形参只读且不能更改
3、在函数执行完毕,返回调用环境时候,实参到的值也不会改变(k=1)
同oracle表现一致

in参数还支持不赋值创建,

create or replace function in_t000(i int) return void as 
begin
    raise notice 'i = %', i;
end;

通过匿名块进行调用,查看结果
在这里插入图片描述

2、out参数模式

out参数:调用方式需传参数(会忽略传入的值)、支持修改实参的值、支持独立返回值

create or replace procedure out_t000(j out int) as 
begin
    raise notice 'j = %', j;
	j := 10;
end;
/

通过匿名块进行调用
在这里插入图片描述
从以上示例可以看出:
在调用过程时候,会忽略传入的形参的值,形参像未初始化的变量,值为null(j = )
形参可以读取和写入
在过程执行之后,返回调用环境(只有程序正常结束时),会将形参赋值给实参(k = 10)

3、inout参数模式

in out参数:调用方式需传参数、支持修改实参的值、支持独立返回值

create or replace function inout_t001(i in out text)  return int as 
begin
    raise notice 'i = %', i;
	i := 't000';
	raise notice 'i = %', i;
	return 1;
end;

在这里插入图片描述

4、合并示例:

创建存储过程p,包含2个in参数,1个out参数和1个in参数,过程p通过不同的实际参数调用两次,在每次调用之前都会打印实际参数的值,每次调用之后再次打印实际参数的值

CREATE OR REPLACE PROCEDURE p (
  a        int,  -- IN by default
  b     IN int,
  c    OUT int,
  d IN OUT int
) IS
BEGIN
  -- Print values of parameters:
  raise notice 'a = %', a;
  raise notice 'b = %', b;
  raise notice 'c = %', c;
  raise notice 'd = %', d;
 
  -- Can reference IN parameters a and b,
  -- but cannot assign values to them.
 
  c := a+10;  -- Assign value to OUT parameter
  d := 10/b;  -- Assign value to IN OUT parameter
END;
/

通过匿名块调用

DECLARE
  aa  CONSTANT int := 1;
  bb  int  := 2;
  cc  int  := 3;
  dd  int := 4;
  ee  int;
  ff  int := 5;
BEGIN
  raise notice 'aa = %', aa;
  raise notice 'bb = %', bb;
  raise notice 'cc = %', cc;
  raise notice 'dd = %', dd;
 
  p (aa, -- constant
     bb, -- initialized variable
     cc, -- initialized variable 
     dd  -- initialized variable
  );
 
  raise notice 'aa = %', aa;
  raise notice 'bb = %', bb;
  raise notice 'cc = %', cc;
  raise notice 'dd = %', dd;
  raise notice 'ee = %', ee;
  raise notice 'ff = %', ff;
 
  p (1,        -- literal 
     (bb+3)*2, -- expression 
     ee,       -- uninitialized variable 
     ff        -- initialized variable
   );
 
  raise notice 'ee = %', ee;
  raise notice 'ff = %', ff;
END;
/

执行结果如下,此表现同oracle一致:
NOTICE: aa = 1
NOTICE: bb = 2
NOTICE: cc = 3
NOTICE: dd = 4
NOTICE: a = 1
NOTICE: b = 2
NOTICE: c =
NOTICE: d = 4
NOTICE: aa = 1
NOTICE: bb = 2
NOTICE: cc = 11
NOTICE: dd = 5
NOTICE: ee =
NOTICE: ff = 5
NOTICE: a = 1
NOTICE: b = 10
NOTICE: c =
NOTICE: d = 5
NOTICE: ee = 11
NOTICE: ff = 1
ANONYMOUS BLOCK

【更多人大金仓数据库信息, 详见 金仓文档管理系统

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:21:05  更:2022-03-03 16:24:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:53:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码