createfunction schema名.函数名 ( in 参数 参数类型 ) returns 返回值 返回值类型 language sqlscript as begin SQL语句 end;
实际案例
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
createfunction SUSER.FV_MARA_MATNR ( in i_matnr nvarchar(40) --输入物料代码 ) returns o_matnr nvarchar(40) --输出物料代码 language sqlscript as begin if(:i_matnr <>'') then selectcasewhen length(replace_regexpr('[^0-9]'in :i_matnr))=length(:i_matnr) then left('000000000000000000',18-length(:i_matnr))||(:i_matnr) else :i_matnr end into o_matnr from dummy; else select :i_matnr into o_matnr from dummy; end if; end;
函数测试
SQL
1
select FV_MARA_MATNR('abc'), FV_MARA_MATNR('123'), FV_MARA_MATNR('00123'), FV_MARA_MATNR('abc999') from dummy;
测试结果
SQL
1
abc 000000000000000123000000000000000123 abc999
实际应用
查询mara中物料代码为3504的记录
CODE
1 2 3
select * from mara where mandt=800 and matnr=3504 --attribute value is not a number select * from mara where mandt=800 and matnr='3504' --no record selected select * from mara where mandt=800 and matnr=FF_MARA_MATNR('3504') --selected record matnr='000000000000003504'
表值函数
创建语法
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13
createfunction 函数名 ( in 参数 参数类型 ) returnstable ( 字段 字段类型 ) Language SQLScript as Begin return SELECT 语句; end;