1. 程式人生 > >oracle對逗號隔開的欄位進行翻譯

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的字典項,以此類推。有時候設計表的時候,會把多個頁面相似的內容設定為同一個欄位,但是不同頁面這個欄位對應的字典項又是不同的,所以要根據不同類別對這一欄位進行翻譯。