|
|
获取表中的最大编码(前面加有自定义的表名的缩写头)
--获取表中的最大编码(前面加有自定义的表名的缩写头)
create or replace function sys_get_nextid_g
(l_table_name in varchar2,l_col_name in varchar2)
return varchar2
is
l_string varchar2(200);
ls_head varchar2(10);
cursor_name number;
l_no varchar2(20);
l_date varchar2(8);
l_number number;
begin
l_string :='select Max('||l_col_name||') from '||l_table_name;
cursor_name := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cursor_name, l_string, DBMS_SQL.native);
dbms_sql.define_column(cursor_name,1,l_no,20);
l_no := DBMS_SQL.EXECUTE(cursor_name);
if dbms_sql.fetch_rows(cursor_name) > 0 then
dbms_sql.column_value(cursor_name,1,l_no);
End if;
--execute immediate l_string into l_no;
select to_char(sysdate,'yyyymmdd') into l_date from dual;
select s.bill_sym_id into ls_head
from sys_bill_type s
where s.bill_id = l_table_name;
If substr(substr(l_no,-12),1,8) = l_date then
l_number := to_number(substr(l_no,-4)) + 1;
Elsif substr(substr(l_no,-12),1,8) <> l_date then
l_number := 1;
End if;
l_no := Rtrim(ls_head) || l_date || ltrim(to_char(l_number,'0000'));
return l_no;
end; |
|