oracle對逗號隔開的欄位進行翻譯
阿新 • • 發佈:2018-12-11
設定三個函式
第一個函式欄位翻譯函式
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的字典項,以此類推。有時候設計表的時候,會把多個頁面相似的內容設定為同一個欄位,但是不同頁面這個欄位對應的字典項又是不同的,所以要根據不同類別對這一欄位進行翻譯。