oracle对逗号隔开的字段进行翻译

设置三个函数

第一个函数字段翻译函数

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的字典项,以此类推。有时候设计表的时候,会把多个页面相似的内容设置为同一个字段,但是不同页面这个字段对应的字典项又是不同的,所以要根据不同类别对这一字段进行翻译。

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/82794103