设置三个函数
第一个函数字段翻译函数
create or replace function FUNC_LICENCE_TYPE_DIC(field_val in varchar2,id in varchar2)
return varchar2
is
v_val varchar2(50);
v_mult_val varchar2(100);
res_back varchar2(100);
cursor c_result is
select t.column_value from table (SPLIT_FOR_ARRAY(field_val,',')) t;
c_row c_result%rowtype;
begin
for c_row in c_result loop
select a.dictitemname into v_val from BDC_DICTITEM a where a.dictitemcode = c_row.column_value and a.dictid = id;
v_mult_val := v_mult_val|| ','||v_val;
end loop;
select substr(v_mult_val,2) into res_back from dual;
return res_back;
EXCEPTION
WHEN OTHERS THEN
RETURN '';
end FUNC_LICENCE_TYPE_DIC;
第二个函数
字段分隔函数
CREATE OR REPLACE FUNCTION SPLIT_FOR_ARRAY(P_STR IN VARCHAR2,
P_DELIMITER IN VARCHAR2 DEFAULT (',') --分隔符,默认逗号
)RETURN array_container IS
J INT := 0;
I INT := 1;
LEN INT := 0;
LEN1 INT := 0;
STR VARCHAR2(4000);
MY_SPLIT array_container := array_container();
BEGIN
LEN := LENGTH(P_STR);
LEN1 := LENGTH(P_DELIMITER);
WHILE J < LEN LOOP
J := INSTR(P_STR, P_DELIMITER, I);
IF J = 0 THEN
J := LEN;
STR := SUBSTR(P_STR, I);
MY_SPLIT.EXTEND;
MY_SPLIT(MY_SPLIT.COUNT) := STR;
IF I >= LEN THEN
EXIT;
END IF;
ELSE
STR := SUBSTR(P_STR, I, J - I);
I := J + LEN1;
MY_SPLIT.EXTEND;
MY_SPLIT(MY_SPLIT.COUNT) := STR;
END IF;
END LOOP;
RETURN MY_SPLIT;
END SPLIT_FOR_ARRAY;
第三个
定义类型
CREATE OR REPLACE TYPE "ARRAY_CONTAINER" AS TABLE OF varchar2(100)
例子
根据不同类别,对同一字段不同的字典项进行翻译
select mm.*,FUNC_LICENCE_TYPE_DIC(mm.matain_reason,reasontype) matain_reason from (select t.voltage_type,
t.matain_reason,
case
when t.voltage_type ='1'
then '52'
when t.voltage_type ='2'
then '53'
when t.voltage_type ='3'
then '54'
end reasontype from recodr_maintain_voltage t) mm
说明,如果类型是1则翻译对应字典编码为52的字典项,以此类推。有时候设计表的时候,会把多个页面相似的内容设置为同一个字段,但是不同页面这个字段对应的字典项又是不同的,所以要根据不同类别对这一字段进行翻译。