在数据验证中,经常遇到需返回结果集的操作,故整理一个返回结果集的DB2函数,便于后期查阅

1、准备测试表

/*创建测试表:设置结果集的属性为表字段*/
CREATE TABLE Test_EXWASTE_EXC
(
Test_Time TIMESTAMP ,--
Test_STATION CHARACTER(6),--
Test_Three CHARACTER(2) ,--
Test_Four varchar(3) ,--
Test_Five varchar(1) ,--
Test_MODIFY varchar(1) --
)

2、创建返回结果集的函数

/*函数的作用:refpk中以‘,’分隔的信息插入到测试表,并返回结果集*/
--/
create FUNCTION Test_Func_GetInfo(REFPK VARCHAR(500)) --REFPK为传入的参数
returns --返回值的类型为table
TABLE(Out_Time TIMESTAMP,
Out_Station character(6),
Out_Three character(2),
Out_Four SMALLINT,
Out_Five smallint,
Out_Modify character(1))
LANGUAGE SQL
MODIFIES SQL DATA --MODIFIES SQL DATA 表示函数中有ddl操作
begin atomic
DECLARE Out_Time TIMESTAMP;
DECLARE Out_Station character(6);
DECLARE Out_Three character(2);
DECLARE Out_Four SMALLINT;
DECLARE Out_Five smallint;
DECLARE Out_Modify character(1);
DECLARE I_INDEX INT;--
DECLARE I_Length INT;
DECLARE I_Locate INT;
DECLARE V_Char character(1);
DECLARE I_Switch INT;
DECLARE I_Return INT;
DECLARE V_Refpk varchar(500); set I_Return=0;
set I_INDEX=1;
set I_Length=0;
set I_Locate=1;
set I_Switch=0;
set V_Refpk=refpk||',';
set I_Length=length(V_Refpk); set I_Return=1;
while I_INDEX<=I_Length do --将','分隔的信息取出来
set V_Char=substr(V_Refpk,I_INDEX,1);
if V_Char=',' then
set I_Switch=I_Switch+1;
if I_Switch=1 then set Out_Time=timestamp(substr(V_Refpk,I_Locate,I_INDEX-I_Locate));
elseif I_Switch=2 then set Out_Station=substr(V_Refpk,I_Locate,I_INDEX-I_Locate);
elseif I_Switch=3 then set Out_Three=substr(V_Refpk,I_Locate,I_INDEX-I_Locate);
elseif I_Switch=4 then set Out_Four=substr(V_Refpk,I_Locate,I_INDEX-I_Locate);
elseif I_Switch=5 then set Out_Five=substr(V_Refpk,I_Locate,I_INDEX-I_Locate);
else set Out_Modify=substr(V_Refpk,I_Locate,I_INDEX-I_Locate);
end if;
set I_Locate=I_INDEX+1;
end if;
set I_INDEX=I_INDEX+1;
end while;
insert into Test_EXWASTE_EXC values(Out_Time,Out_Station,Out_Three,Out_Four,Out_Five,Out_Modify);
return select * from Test_EXWASTE_EXC ;
end
/

3、函数的调用

由于函数的返回值为table,故我们操作此函数像操作表一样

select T.OUT_TIME from table(Test_Func_GetInfo('2019-06-10 07:30:40,020801,28,154,0,1')) T where T.OUT_TIME=timestamp'2019-06-10 07:30:40'
--注意T的字段是函数中定义的字段,与Test_Exwaste_exc无关

4、关键字MODIFIES SQL DATA删掉,报-374错误

DB2---创建返回结果集的函数的更多相关文章

  1. PostgreSQL 调用存储过程返回结果集

    创建返回结果集类型的存储过程: CREATE OR REPLACE FUNCTION public.f_get_member_info( id integer, productname charact ...

  2. oracle pipelined返回值函数 针对数据汇总统计 返回结果集方法

    近期需要一个汇总统计,由于数据太多,数据量太大所以在java程序中实现比较困难.若用后台程序统计,数据不能保证实时,同时实现周期比较长.顾使用函数返回结果集的方式,在不增加临时表的情况下实时获取数据. ...

  3. oracle函数返回结果集

    一.用自定义类型实现 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: create or replace type type_table is table of ...

  4. KingbaseES函数如何返回结果集

    函数返回值一般是某一类型值,如int,varchar,date等,返回结果集时就需要用到setof语法. 创建数据 create table class(id number primary key, ...

  5. postgresql 函数返回结果集(zz)

    pgsql function 系列之一:返回结果集--------------------------------------------------------------------------- ...

  6. Oracle中函数/过程返回结果集的几种方式

    原文 Oracle中函数/过程返回结果集的几种方式 Oracle中函数/过程返回结果集的几种方式:    以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过.    ...

  7. oracle调用存储过程和函数返回结果集

    在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...

  8. Oracle中函数如何返回结果集

    在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, ...

  9. oracle创建存储过程并返回结果集(附C#调用代码)

    使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我 ...

  10. DB2创建function(二)

    DB2创建function(一),介绍将function内容作为字段值,或做为一个where条件的情况. DB2创建function(二),介绍返回的内容为一个集合的情况.调用结果集的示例如下: se ...

随机推荐

  1. 从源码级深入剖析Tomcat类加载原理

    众所周知,Java中默认的类加载器是以父子关系存在的,实现了双亲委派机制进行类的加载,在前文中,我们提到了,双亲委派机制的设计是为了保证类的唯一性,这意味着在同一个JVM中是不能加载相同类库的不同版本 ...

  2. chatgpt入口,免费在线chatgpt--与人工智能聊天?尝试chatgpt入口,免费在线chatgpt吧!

    介绍一款人工智能聊天机器人--chatgpt入口 chatgpt是一款智能聊天机器人,它能够与人类进行自然语言对话,可以回答问题.提供建议,还可以玩游戏和聊天互动,是当前最受欢迎的人工智能聊天工具之一 ...

  3. Python与TensorFlow:如何高效地构建和训练机器学习模型

    目录 标题:<Python 与 TensorFlow:如何高效地构建和训练机器学习模型> 一.引言 随着人工智能的快速发展,机器学习作为其中的一个重要分支,受到了越来越多的关注和应用.而P ...

  4. 在Linux环境下通过命令行执行JMeter脚本后查看响应结果的配置

    在Linux环境中进行性能测试时,我们可能会遇到一定程度的报错.如果无法打开JMeter的GUI界面,但又需要查看响应结果,可以按照以下步骤进行配置: 1. 打开JMeter的安装目录,在`bin/` ...

  5. 在js中修改less文件内样式

    在项目中使用使用进度条时遇到了一点问题,根据需求进度条的百分比需要在条内显示,但是当完成度太低时由于进度条背景和百分比值都是接近的颜色,所以此时无法显示进度值,这个时候需要根据完成度大小来进行判断,动 ...

  6. 电子表格vlookup函数使用

    vlookup是常用的辅助查找函数,但是这个函数的参数定义和解释非常的难以理解,即使用向导也很难搞清楚哪个参数是啥意思.放到编程圈里面应该也算bad design的典型了.下面是函数的定义,每次看到这 ...

  7. 【WebRtc】获取分享屏幕

    分享前页面 获取分享屏幕 Code /** * 开始屏幕共享 */ openShareScreen() { var that = this // 判断是否支持获取本地屏幕分享数据 if (!navig ...

  8. iphone拍照的历史顽固问题-鬼影

    iphone11 系列的鬼影问题 近期苹果 iPhone 11 系列的手机又出现了新问题,其中有不少网友表示,自己在用手机拍照后,图片中莫名出现了"鬼影"的现象,这次的" ...

  9. 伸展树(Splay)详解

    引入 在一条链中,二叉查找树的时间复杂度就会退化成 \(O(n)\),这时我们就需要平衡树来解决这个问题. \(Splay\)(伸展树)是平衡树的一种,它的每一步插入.查找和删除的平摊时间都是 \(O ...

  10. Spring—bean的作用域

    beans的作用域 单例模式(Spring默认模式) <?xml version="1.0" encoding="UTF-8"?> <bean ...