DB2带UPDATE,INSERT语句的函数

摘要:
带UPDATE,INSERT语句的函数返回值应该是一个TABLE如:RETURNSTABLE(COLVARCHAR(36))函数中返回应该:returnselectNEWIDfromsysibm.sysdummy1;在调用时例子:select*fromtable(UF_GETID('RE'))ast创建ID函数:CodeCREATEFUNCTIONDB2INST1.UF_GETID(SNTYPEV
DB2带UPDATE,INSERT语句的函数第1张带UPDATE,INSERT 语句的函数返回值应该是一个TABLE
如:RETURNS TABLE(COL VARCHAR(36))
函数中返回应该:return select NEWID from sysibm.sysdummy1;
在调用时例子:
select*fromtable(UF_GETID('RE'))ast

创建ID函数:
DB2带UPDATE,INSERT语句的函数第2张DB2带UPDATE,INSERT语句的函数第3张Code
CREATEFUNCTIONDB2INST1.UF_GETID(SNTYPEVARCHAR(36))
RETURNSTABLE(COLVARCHAR(36))
SPECIFICDB2INST1.SQL090904180732700
LANGUAGESQL
DETERMINISTIC
NOEXTERNALACTION
MODIFIESSQLDATA
NULLCALL
INHERITSPECIALREGISTERS
BEGINATOMIC
declareNEWIDvarchar(36);
DECLAREv_stepinteger;---默认自增量DECLARENUMvarchar(36);---当前最大值DECLARENOWDATEVARCHAR(50);---获取时间字符串DECLAREV_TYPEVARCHAR(50);---输入的类型SETv_step=1;--默认为自增1SETV_TYPE=SNTYPE;---设置输入的类型----对不存在的类型ifnotexists(select*fromserviceidwheresntype=V_TYPE)then---得到当前时间setNOWDATE=replace(replace(replace(to_char(currenttimestamp,'YYYY-MM-DDHH24:MI:SS'),'-',''),':',''),'','');
---拼接这个ID字符串SETNEWID=SNTYPE||NOWDATE||'1';
---加入这条记录insertintoSERVICEID(SNTYPE,MAXNUM,STEP)VALUES(V_TYPE,NEWID,v_step);
else---得到当前时间setNOWDATE=replace(replace(replace(to_char(currenttimestamp,'YYYY-MM-DDHH24:MI:SS'),'-',''),':',''),'','');
---查到当前数据库中最大的IDsetNUM=(selectMAXNUMfromSERVICEIDWHERESNTYPE=V_TYPE);
setNUM=replace(NUM,SUBSTRING(NUM,1,16,CODEUNITS32),'');
---查询出当前最大值并加1得到新的IDsetNUM=RTRIM(char(INTEGER(NUM)+1));
---得到当前时间setNOWDATE=replace(replace(replace(to_char(currenttimestamp,'YYYY-MM-DDHH24:MI:SS'),'-',''),':',''),'','');
---拼接这个ID字符串SETNEWID=SNTYPE||NOWDATE||NUM;
updateSERVICEIDSETMAXNUM=NEWIDWHERESNTYPE=V_TYPE;
endif;
returnselectNEWIDfromsysibm.sysdummy1;
END
;

调用这个执行这个函数:
select*fromtable(UF_GETID('RE'))ast

免责声明:文章转载自《DB2带UPDATE,INSERT语句的函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql快速保存插入大量数据一些方法总结(转)如何为Redis中list中的项设置过期时间下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关联查询-高级查询

 关联查询-高级查询 关联查询:表与表之间想要关联查询,关键点是连接条件。 连接条件也就是两张表中都有的字段。一般若有n张表,连接条件至少有n-1个。 实验中:SELECT DISTINCT E.ENAME, D.DNAME,D.DEPTNO FROM EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO;实验中emp表和dept表的...

MySQL 连接查询

一.什么是连接查询 1.连接查询是一种非常常见的数据库操作,在两张(或者多张)表中进行匹配. 2.以mysql为例,支持Cross join(交叉连接), inner join(内连接), outer join(外连接),等其他连接.  二、数据准备(创建emp员工表和dept部门表并插入数据) SET NAMES utf8mb4; SET FOREIGN...

DB2 日期时间函数

db2日期时间函数 (DATE(TRIM(CHAR(DT#11Y))||'-'||TRIM(CHAR(DT#11M))||'-'||TRIM(CHAR(DT#11D))) BETWEEN DATE('" & strDate1 & "') AND DATE('" & strDate2 & "')) (Y > y) OR...

SQL语句查询每个分组的前N条记录的实现方法

SQL语句查询每个分组的前N条记录的实现方法: 1、生成测试数据: #T if object_id('tempdb.dbo.#T') is not null drop table #T; create table #T (ID varchar(3), GID int, Author varchar(29), Title varchar(39), Da...

MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL

1 . cascade方式  在父表上update/delete记录时,同步update/delete掉子表的匹配记录     2. set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null要注意子表的外键列不能为not null   3. No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行...

MySQL查询性能优化

1.为什么查询速度为变慢 在尝试编写快速的查询之前,需要清楚一点,真正重要是响应时间。如果把查询看作是一个任务,那么他由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行的次数,要么让子任务运行得更快。 MySQL在执行查询的时候有哪些子任务。哪些子任务运行的速度很慢,这里很难...