自定義函式 根據相同的key合併值

2021-08-31 04:14:47 字數 2283 閱讀 4587

--刪除測試表

--drop table test;

--建立測試表

create table test (fcode varchar(10),fname varchar(20));

--刪除臨時表

--drop table temp;

--建立臨時表

create table temp(fkey varchar(10),fvalue varchar(100));

--刪除函式

--drop function fun_test;

--自定義函式中不能使用臨時表和游標

--建立函式:將多行相同的編號合併成一行,名稱用分隔符合併

create function fun_test(

para_split varchar(1) -- 分隔符

) returns table(fcode varchar(10),fname varchar(100))

language sql

modifies sql data --函式中呼叫儲存過程需要該配置

--reads sql data

begin atomic

--定義變數

declare num int;

declare key_ varchar(10); -- 比較的關鍵值

declare value_ varchar(100); -- 根據相同key的值通過分隔符合併

--初始化變數

set num = 0;

set key_ = '';

set value_ = '';

--判斷是否存在test表,如果不存在就建立該錶(測試用的表)

for tablename as select name from sysibm.systables where creator not in ( 'sysibm ', 'syscat ', 'sysstat ') and name = 'test'--表名要大些

doif(tablename.name != '') then

delete from test;

insert into test(fcode, fname) values('1001', 'a1'),('1001', 'b1'),('1001', 'c1'),('1002', 'a2'),('1002', 'b2'),('1003', 'a3');

end if;

end for;

--刪除臨時表的資料

for tempname as select name from sysibm.systables where creator not in ( 'sysibm ', 'syscat ', 'sysstat ') and lower(name) = 'temp' -- lower轉換為小寫

doif(tempname.name != '') then

delete from temp;

end if;

end for;

for test as select fcode, fname from test order by fcode --需要根據編號排序

doif num = 0 then

set key_ = test.fcode;

set value_ = test.fname;

set num = 1;

else --這裡不是 else if

if (key_ = test.fcode) then

set value_ = value_ || para_split || test.fname;

set num = num + 1;

else

insert into temp(fkey, fvalue) values(key_,value_);

set value_ = test.fname;

set key_ = test.fcode;

set num = num + 1;

end if;

end if;

end for;

if (num > 0) then

insert into temp(fkey, fvalue) values(key_, value_);

end if;

--可以呼叫儲存過程,不能返回儲存過程的返回值

--函式返回值

return select fkey, fvalue from temp;

end;

--呼叫函式

--select * from table(fun_test('-')) as t

zabbix 使用者自定義key

使用者自定義引數 userparameter 僅支援agent的方式,對於其他方式不支援。1 自定義key的語法 在 etc zabbix zabbix agentd.conf中配置引數,寫法如下 userparameter key command 1 2 3 key item key 具有唯一行,...

zabbix常用key和自定義key的講解

zabbix中常用到的幾個key 1 監控埠的 net.tcp.port 3306 usr local zabbix bin s192.168.8.120 knet.tcp.port 3306 返回1為192.168.8.120的埠3306存在,0為不存在 2 監控程序的 proc.num mysq...

zabbix常用key和自定義key的講解

zabbix中常用到的幾個key 1 監控埠的 net.tcp.port 3306 usr local zabbix bin s192.168.8.120 knet.tcp.port 3306 返回1為192.168.8.120的埠3306存在,0為不存在 2 監控程序的 proc.num mysq...