当前位置: 移动技术网 > IT编程>数据库>Oracle > oracle生成动态前缀且自增号码的函数分享

oracle生成动态前缀且自增号码的函数分享

2017年12月12日  | 移动技术网IT编程  | 我要评论

韩雪称愿意做网红,hp同人黑暗之光,广州60路公交车路线

复制代码 代码如下:

create or replace

function getinvitationno(prev varchar2, num1 varchar2, num2 varchar2, sessionsetting varchar2)

return varchar2

authid current_user is pragma autonomous_transaction;-- 需要使用“current_user”的权限防止无法运行“execute immediate”命令 & “pragma autonomous_transaction”自制事务防止dml无法ddl的问题

totalprev varchar2(50);

hassequences number;

reno varchar2(50);

begin

-- 号码的前缀

totalprev := prev || num1 || num2 || sessionsetting;

-- 创建序列

select count(*) into hassequences from user_sequences where sequence_name=totalprev;

if hassequences <> 1 then

execute immediate 'create sequence '||totalprev||' increment by 1 start with 1 maxvalue 9999999 nocycle';

end if;

-- 通过动态的序列名取序列值,把获取的序列值转换为7位长度的字符串,长度不足用“0”填充 

execute immediate 'select '''|| totalprev ||''' || to_char('||totalprev||'.nextval,''fm0000000'') from dual' into reno;

-- to_char()中fm后跟的0代表了数字的位数,不足的用“0”填充;加上“fm”可以避免空格的出现,前面的空格是为符号位保留的,如果是对负数使用to_char,则空格部分是用来显示-的,因为是正数,所以不显示+,而是以空格代替

return reno;

end;

测试

复制代码 代码如下:

select getinvitationno('p', '1', '01', '114') from dual
-- dual 是 oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网