create or replace function func_nextid(i_tab in varchar2,i_column in varchar2)
return number
as
v_no number(10);
v_tab varchar2(100);
v_sql varchar2(4000);
begin
v_sql:='SELECT NVL(MAX('||i_column||'),-1) FROM '||i_tab;
execute immediate v_sql into v_no;
select upper(i_tab) into v_tab from dual;
if v_no=-1 then
insert into tseq(cvalue,tname,tspace,cname)
select
1,
substr(v_tab,instr(v_tab,'.')+1,length(v_tab)-instr(v_tab,'.')),
nvl(substr(v_tab,1,instr(v_tab,'.')-1),(select username from user_users)),
upper(i_column)
from dual;
v_no:=1;
else
v_no:=v_no+1;
delete from tseq where tname=substr(v_tab,instr(v_tab,'.')+1,length(v_tab)-instr(v_tab,'.')) and cname=upper(i_column) and tspace=nvl(substr(v_tab,1,instr(v_tab,'.')-1),(select DEFAULT_TABLESPACE from user_users));
insert into tseq(cvalue,tname,tspace,cname)
select
v_no,
substr(v_tab,instr(v_tab,'.')+1,length(v_tab)-instr(v_tab,'.')),
nvl(substr(v_tab,1,instr(v_tab,'.')-1),(select DEFAULT_TABLESPACE from user_users)),
upper(i_column)
from dual;
end if;
return v_no;
end;