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

||字符串连接

正确的应该是绿色的:

oracle--函数--自定义函数_编写一个简单的oracle函数


否则会有一个红色的小叉号:

右键选择,编辑下方会给出错误提示信息,修改直到正确。

oracle--函数--自定义函数_编写一个简单的oracle函数_02


oracle--函数--自定义函数_oracle函数_03


oracle--函数--自定义函数_oracle函数_04


oracle--函数--自定义函数_oracle编译错误解决_05


oracle--函数--自定义函数_oracle函数_06


oracle--函数--自定义函数_编写一个简单的oracle函数_07


zz就有问题了。。

删除函数

oracle--函数--自定义函数_编写一个简单的oracle函数_08