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 语句