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

复制代码 代码如下:

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语句块中

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐