我最近开始研究IBM I AS / 400 我正在尝试创建一个函数,根据4个输入选择不同的东西,有时它会进行链操作,这应该接近自由... 但它不是。< / p>
功能:
CREATE OR REPLACE FUNCTION yxdb.GET_SEARCH_RESULT_TYPE (stakeholder_id INTEGER, account_number INTEGER, search_type VARCHAR(10),search_type_ref INTEGER)
RETURNS varchar(40)
LANGUAGE SQL
DETERMINISTIC --caching as parameter ==> svar. || 'not deterministic' ==> no caching.
NOT FENCED
BEGIN
DECLARE name VARCHAR(40);
SET name = CASE WHEN search_type = 'EMNADRESSE' THEN
--email
'Email 1'
WHEN search_type = 'FFADRESSE ' THEN
-- Hovedadresse
-- 'Hovedadresse'
CASE WHEN account_number = 0
THEN 'Interessent'
ELSE 'Konto'
END
WHEN search_type = 'TNKLEVADR ' THEN
--Tankleveringsadresse
--'Tankleveringsadresse'
'Tank ' || (select TKVOL ||' - ' || TKBRUG from tkmstp where tknr = search_type_ref and tkknnr = account_number)
ELSE
search_type
END;
RETURN name;
END;
因此有效时间大约为9秒,当使用167行时,但解释计划表示它每个只需要~171 ms。 (我知道这是在最佳表现下)。
试图评论|| (select TKVOL ||' - ' || TKBRUG from tkmstp where tknr = search_type_ref and tkknnr = account_number)
然后它的执行速度非常快。
试图切换fenced
,尝试切换Deterministic
。
我试图将其创建为子查询,在主查询中,这也非常快......
用法:
select stake.*, yxdb.GET_SEARCH_RESULT_TYPE(1,fkkntnr, fkreltyp, FKPRDREF) RESULT_TYPE from frnkonp stake
where stake.fkkonidn in (202818,203116,941284,941285)
包含选择时UDF是否无法执行?