Mysql 和 db2 coalesce_DB2使用语法小结

a4c26d1e5885305701be709a3d33442f.png

db2语法

======================================自定义32位UUID=============================================

很多数据库都提供了UUID/GUID函数,好在DB2提供的了自定义函数接口,而且支持JAVA,既然没有,提供JAVA自定义函数,用JAVA写个UUID

1. JAVA类

import java.util.UUID;

import COM.ibm.db2.app.UDF;

public class UDFUUID extends UDF{

public

static String uuid(){

UUID uuid = UUID.randomUUID();

//去掉中间的分隔

String uid = uuid.toString().replaceAll("-", "");

return uid;

}

}

2.把JAVA类放到DB2函数库目录下去,放到IBM\SQLLIB\FUNCTION下

3.用DB2带的jdk编译一下,****检查一下CLASSPATH配置信息是否需要加上编译文件文件的路径

IBM\SQLLIB\java\jdk\bin>javac

D:\IBM\SQLLIB\FUNCTION\UDFUUID.java(本人实际执行的命令语句)

IBM\SQLLIB\java\jkd\bin\javac UDFUUID.java

4.注册函数 (执行时一定注意语句中是否包含全角空格)

drop function uuid;

create function uuid()

returns char(32)

fenced

variant

no sql

language java

parameter style java

external name 'UDFUUID!uuid';

5.使用看看

values uuid();

==================================================================================================

db2 获取32位uuid SQL语句:select uuid() from

sysibm.sysdummy1;

db2 获取当前时间 SQL语句:select current timestamp from

sysibm.sysdummy1;

db2

字符串拼接concat()方法,只能有两个参数,且两个参数数据类型要一致,如果不一致会报错,不同于mysql会自动进行数据类型转换

mysql ifnull函数对应DB2 coalesce()

创建表

create table test_tem_trig

( id varchar(100) not null ,

table_id varchar(100),

transaction_transfer_no varchar(50) not null

,

data_type integer ,

data_record clob,

time_stamp varchar(25)

);

alter table test_tem_trig add constraint constraint_name primary

key(id);

约束条件 约束名称

获取触发器名称 严格区分大小写

select trigname from SYSCAT.TRIGGERS where owner=current user and

tabname='AM_BASE_TASKS'

================================DB2触发===========================

在db2环境下写存储过程,函数和触发器时,由于这些语句中;为语句终止符,所以需要重新设置语句终止符。方法如下:

在语句开始前输入 --#SET TERMINATOR @,这样将这些单元的终止符设置为@。

语句结束后输入 --#SET TERMINATOR ;

--#SET TERMINATOR @

create trigger trig_test_insert

after insert on test_table

referencing new as n

for each row

begin atomic

DECLARE transaction_transfer_no

varchar(100); declare data_type INTEGER; declare time_stamp VARCHAR(100); declare uuid_0 VARCHAR(50);

declare table_id_0 VARCHAR(50);

declare extractor_table_name_0 VARCHAR(50);

declare data_record_0 clob; -----拼接触发器中 临时变量赋值

set transaction_transfer_no ='';

set data_type = 3 ;

set time_stamp = (select current timestamp from

sysibm.sysdummy1);

-----每个临时变量赋值 set uuid_0 = (select uuid() from

sysibm.sysdummy1) ;

set table_id_0 = 'qwert';

set extractor_table_name_0 = 'test_tem_trig';

set data_record_0 = ''||n.name||'';

-----根据筛选条件是否为空来拼接 触发器中执行插入数据部分SQL语句

-----delete操作

if n.age>20 then

insert into test_tem_trig

(id,table_id,transaction_transfer_no,data_type,data_record,time_stamp)

values(

uuid_0,table_id_0,transaction_transfer_no,data_type,data_record_0,time_stamp);

end if;

end@

--#SET TERMINATOR ;

==================================================================================================

删除触发器使用 DROP TRIGGER 语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值