123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- CREATE OR REPLACE FUNCTION get_next_id(obj_id_ IN VARCHAR ,
- ext_value_ IN VARCHAR ) RETURNS VARCHAR AS $$
- declare
- l_res VARCHAR ;
- l_temp VARCHAR;
- l_temp_ext_value VARCHAR;
- l_field_value VARCHAR;
- l_key_type VARCHAR;
- l_start integer;
- l_step integer;
- l_value integer;
- nPos integer;
- l_index integer;
- l_lead_zero_len integer;
- l_mask VARCHAR;
- l_ext_value VARCHAR;
- get_sys_id cursor(obj_id_ varchar) FOR
- SELECT KEY_TYPE, start ,STEP, VALUE ,MASK, lead_zero_len,ext_value
- FROM sys_id WHERE obj_id = obj_id_;
- BEGIN
- open get_sys_id(obj_id_);
- fetch get_sys_id INTO l_key_type,l_start,l_step,l_value,l_mask ,l_lead_zero_len,l_ext_value;
- close get_sys_id ;
- IF l_start IS NULL THEN
- l_start:=1;
- END IF;
- IF l_step IS NULL THEN
- l_step :=1;
- END IF;
- if l_key_type is null THEN
- SELECT sys_guid() INTO l_res;
- l_res := REPLACE(l_res,'-','') ;
- end if;
- /*l_key_type*/
- /*1: 自增,2: UUID,3: 日期+自增,4: 年月+自增;5: 年+自增 */
- IF l_key_type='1' THEN
- IF l_value IS NULL THEN
- l_value :=l_start;
- ELSE
- l_value := l_value+ l_step;
- END IF;
- IF l_lead_zero_len>0 THEN
- l_res :=LPAD(l_value,l_lead_zero_len,'0') ;
- ELSE
- l_res :=cast(l_value as INTEGER) ;
- END IF;
- IF l_mask IS NOT NULL THEN
- l_res:= REPLACE(l_mask,'{SEQ}',l_res) ;
- END IF;
- UPDATE sys_id
- SET VALUE=l_value
- WHERE obj_id = obj_id_ ;
- ELSIF l_key_type='3' THEN
- SELECT to_char(now(),'YYYYMMDD') INTO l_temp_ext_value ;
- IF l_temp_ext_value= l_ext_value THEN
- IF l_value IS NULL THEN
- l_value :=l_start;
- ELSE
- l_value := l_value+ l_step;
- END IF;
- ELSE
- l_value :=l_start;
- l_ext_value :=l_temp_ext_value;
- END IF;
- IF l_lead_zero_len>0 THEN
- l_temp :=LPAD(l_value,l_lead_zero_len,'0') ;
- ELSE
- l_temp :=cast(l_value as INTEGER);
- END IF;
- IF l_mask IS NOT NULL THEN
- l_res := REPLACE(l_mask,'{DATE}',l_ext_value) ;
- l_res := REPLACE(l_res,'{SEQ}',l_temp) ;
- ELSE
- l_res := l_ext_value||'-'||l_temp ;
- END IF;
- UPDATE sys_id
- SET VALUE=l_value,
- ext_value=l_ext_value
- WHERE obj_id = obj_id_ ;
- ELSIF l_key_type='4' THEN
- SELECT to_char(now(),'YYYYMM') INTO l_temp_ext_value ;
- IF l_temp_ext_value= l_ext_value THEN
- IF l_value IS NULL THEN
- l_value :=l_start;
- ELSE
- l_value := l_value+ l_step;
- END IF;
- ELSE
- l_value :=l_start;
- l_ext_value :=l_temp_ext_value;
- END IF;
- IF l_lead_zero_len>0 THEN
- l_temp :=LPAD(l_value,l_lead_zero_len,'0') ;
- ELSE
- l_temp :=cast(l_value as INTEGER);
- END IF;
- IF l_mask IS NOT NULL THEN
- l_res := REPLACE(l_mask,'{DATE}',l_ext_value) ;
- l_res := REPLACE(l_res,'{SEQ}',l_temp) ;
- ELSE
- l_res := l_ext_value||'-'||l_temp ;
- END IF;
- UPDATE sys_id
- SET VALUE=l_value,
- ext_value=l_ext_value
- WHERE obj_id = obj_id_ ;
- ELSIF l_key_type='5' THEN
- SELECT to_char(now(),'YYYY') INTO l_temp_ext_value ;
- IF l_temp_ext_value= l_ext_value THEN
- IF l_value IS NULL THEN
- l_value :=l_start;
- ELSE
- l_value := l_value+ l_step;
- END IF;
- ELSE
- l_value :=l_start;
- l_ext_value :=l_temp_ext_value;
- END IF;
- IF l_lead_zero_len>0 THEN
- l_temp :=LPAD(l_value,l_lead_zero_len,'0') ;
- ELSE
- l_temp :=cast(l_value as INTEGER);
- END IF;
- IF l_mask IS NOT NULL THEN
- l_res := REPLACE(l_mask,'{DATE}',l_ext_value) ;
- l_res := REPLACE(l_res,'{SEQ}',l_temp) ;
- ELSE
- l_res := l_ext_value||'-'||l_temp ;
- END IF;
- UPDATE sys_id
- SET VALUE=l_value,
- ext_value=l_ext_value
- WHERE obj_id = obj_id_ ;
- ELSE --l_key_type='2' THEN
- SELECT sys_guid() INTO l_res ;
- l_res := REPLACE(l_res,'-','') ;
- END IF;
- IF ext_value_ is not null THEN
- l_index:=1;
- l_temp:=ext_value_ ;
- WHILE position(';' in l_temp)>0 loop
- nPos:=position(';' in l_temp);
- l_field_value:=substring(l_temp from 1 for nPos-1);
- l_temp:=substring(l_temp from nPos+1 );
- l_res := REPLACE(l_res,'{'||cast(l_index as INTEGER)||'}',l_field_value) ;
- l_index:=l_index+1;
- END loop;
- l_res := REPLACE(l_res, '{'||cast(l_index as INTEGER)||'}' ,l_temp) ;
- END IF;
- --commit;
- RETURN l_res;
- END ;
- $$ language plpgsql;
- CREATE or REPLACE FUNCTION sys_guid()
- RETURNS varchar AS
- $$
- DECLARE
- v_seed_value varchar(32);
- BEGIN
- select
- md5(
- inet_client_addr()::varchar ||
- timeofday() ||
- inet_server_addr()::varchar ||
- to_hex(inet_client_port())
- )
- into v_seed_value;
- return (substr(v_seed_value,1,8) ||
- substr(v_seed_value,9,4) ||
- substr(v_seed_value,13,4) ||
- substr(v_seed_value,17,4) ||
- substr(v_seed_value,21,12));
- END;
- $$
- LANGUAGE 'plpgsql' ;
- CREATE OR REPLACE FUNCTION TREPS_CONCAT(str1 VARCHAR , str2 VARCHAR , str3 VARCHAR ) RETURNS VARCHAR AS $$
- BEGIN
- RETURN str1||str2||str3;
- END ;
- $$ language plpgsql;
- CREATE OR REPLACE FUNCTION treps_date_to_char(date1 timestamp , strFormat VARCHAR ) RETURNS VARCHAR as $$
- BEGIN
- RETURN to_char(date1,strFormat) ;
- END ;
- $$ language plpgsql;
- CREATE OR REPLACE FUNCTION treps_instr(str varchar, substr1 varchar,flag integer default 0) returns integer as $$
- declare
- l_res integer;
- posSep integer;
- posSepSub integer;
- strTemp varchar;
- BEGIN
- if (substr1 is null or substr1='') THEN
- return 0;
- end if;
- if (str is null or str='') THEN
- if (flag=1) then
- return 1;
- ELSE
- return 0;
- end if;
- end if;
- posSep:=position( ',' in str );
- posSepSub:=position( ',' in substr1 ) ;
- if (posSep>0) OR (posSepSub>0) then
- if posSepSub>0 then
- l_res:=0;
- strTemp:=substr1;
- while (posSepSub>0)and(char_length(strTemp)>0) loop
- if position( ','||substring(strTemp from 1 for posSepSub-1)||',' in ','||str||',')>0 then
- return 1;
- end if;
- strTemp:= substring(strTemp from posSepSub+1 );
- posSepSub:= position( ',' in strTemp );
- end loop;
- if char_length(strTemp)>0 then
- if position( ','||strTemp||',' in ','||str||',' )>0 then
- return 1;
- end if;
- end if;
- else
- l_res:= position(','||substr1||',' in ','||str||',' );
- end if;
- else
- l_res:= position(substr1 in str );
- end if;
- RETURN l_res;
- END ;
- $$ language plpgsql;
- CREATE OR REPLACE FUNCTION treps_to_date(str1 VARCHAR , strFormat VARCHAR ) RETURNS date as $$
- BEGIN
- RETURN to_date(str1,strFormat) ;
- END ;
- $$ language plpgsql;
- CREATE OR REPLACE FUNCTION TREPS_TO_INT(TEMP_ in varchar ) RETURNS integer AS $$
- BEGIN
- RETURN to_number(TEMP_,'9999999999');
- END ;
- $$ language plpgsql;
|