oracle--函数--自定义函数
原创
©著作权归作者所有:来自51CTO博客作者qq5963a5404b339的原创作品,请联系作者获取转载授权,否则将追究法律责任
oralce-自定义函数的模板
create or replace function 函数名(参数1 模式 参数类型)
return 返回值类型
as
变量1 变量类型;
变量2 变量类型;
begin
函数体;
end 函数名;
实例:
输入:–in:111243140400cu
输出:–out:111243140400cv
规则:
前面12位作为客户编码,后两位作为附加识别码。
把输入的字符串的附加识别码+1后输出
范围:aa-zz
--in:111243140400cu
--out:111243140400cv
CREATE OR REPLACE FUNCTION GETNEXT(SOURCESTR IN VARCHAR2)
RETURN VARCHAR2
AS
customerCode VARCHAR2(100);
suffix VARCHAR2(100);
endch VARCHAR2(100);
ascendch NUMBER;
BEGIN
--1.判断sourcestr是不是customercode重复:customercode的长度等于客户编码的长度12,那么返回customercode+aa
IF LENGTH(sourcestr) = 12 THEN
RETURN sourcestr || 'aa';
--2.普通情况
ELSE
--customercode + suffix重复,suffix+1
--111243140400
customercode := SUBSTR(sourcestr,0,LENGTH(sourcestr) - 2);
--cu
suffix := SUBSTR(sourcestr, -2);
--u
endch := SUBSTR(suffix, -1);
--u++
ascendch := ASCII(endch) + 1;
--ascendch < z ?
IF ascendch <= ASCII('z') THEN
--return customercode + suffix(1) + chr(ascendch)
RETURN customercode || SUBSTR(suffix,0,1)||CHR(ascendch);
ELSE
--return customercode + suffix(1)++ + endch
RETURN customercode || CHR(ASCII(SUBSTR(suffix,0,1)) + 1)||'a';
END IF;
END IF;
END GETNEXT;
length(str)求str长度
substr(str,start,length)对str从start开始截取length长度
ascii(c/str)把c或者str第一个字符转为ascii码
chr(number)把number转为char
||字符串连接
正确的应该是绿色的:
否则会有一个红色的小叉号:
右键选择,编辑下方会给出错误提示信息,修改直到正确。
zz就有问题了。。
删除函数