二、錶值函式
hana和其他資料庫一樣,不但可以定義儲存過程,也可以自定義函式。
自定義函式又分為:標量值函式和錶值函式兩種。
returns子句指定乙個標量資料型別,可以充當乙個字段使用。
create function 函式名
( in 引數 引數型別
)returns 返回值 返回值型別
language sqlscript as
begin
sql語句
end;
編寫乙個sap物料**轉換函式,**是純數字的則前置補0到18位,否則保持。
create function fv_mara_matnr
( in i_matnr nvarchar(40) --輸入物料**
)returns o_matnr nvarchar(40) --輸出物料**
language sqlscript as
begin
if(:i_matnr <> '') then
select case when 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;
函式測試:
select fv_mara_matnr('abc'), fv_mara_matnr('123'), fv_mara_matnr('00123'), fv_mara_matnr('abc999') from dummy;
測試結果:
abc 000000000000000123 000000000000000123 abc999
實際應用:查詢mara中物料**為3504的記錄
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'
**如下(示例):
create function 函式名
( in 引數 引數型別
)returns table
( 字段 字段型別
)language sqlscript as
begin
return
select 語句;
end;
編寫乙個字串拆分函式,根據指定的分隔符,將字串拆分為行表。
**如下(示例):
create function ft_util_split
( in i_text nvarchar(4000) default '', -- 字串
in i_splitchar nvarchar(1) default ',' -- 分隔符
)returns table
( fcode nvarchar(100)
)language sqlscript
asbegin
declare _items varchar(100) array;
declare _text varchar(4000);
declare _index integer;
_text := :i_text;
_index := 1;
while locate(:_text,i_splitchar) > 0 do
_items[:_index] := substr_before(:_text,i_splitchar);
_text := substr_after(:_text,i_splitchar);
_index := :_index + 1;
end while;
_items[:_index] := :_text;
rst = unnest(:_items) as ("fcode"); -- 存入臨時表rst
return
select * from :rst;
end;
函式測試:
select * from ft_util_split('a/b/c/e/f','/');
輸出結果:
自定義函式 Excel之自定義函式
在excel中,當系統函式不能滿足我們的需求時候,我們可以使用vba自定義函式,如抓取網頁資料,翻譯詞彙,手機號歸屬地查詢等。下面將介紹2個自定義函式,idymd函式 身份證年月日性別 通過身份證號,返回性別,出生年月日。語法 idymd id 引數 id,身份證號,預設身份證長度18位。vba 如...
自定義函式
使用者自定義函式是sqlserver的資料庫物件,他不能應用於一系列改變資料庫狀態的操作。但它可以像系統函式那樣在查詢中或儲存過程中等中的程式段中使用。也可以像儲存過程一樣通過execute命令來執行,使用者自定義函式中儲存了transact sql可以返回一定的值。在sqlserver中根據函式返...
自定義函式
自定義函式有標量值函式和錶值函式。標量值函式 如果返回結果指定一種資料型別,則函式為標量值函式。錶值函式 如果返回結果指定table則函式為表值函式。基本語法示例 標量值函式 create function funadd a int return int asbegin declare b int ...