oracle 转字典写法,oracle字典 实现查找和转化的两个function

字典表结构如下:

CREATE TABLE DATA_DICTIONARY

("DTD_ID" NUMBER,

"DTD_CODE" VARCHAR2(10),

"DTD_COLUMN_NAME" VARCHAR2(100),

"DTD_VALUE" VARCHAR2(100)

)

--====================================================================

-- NAME: FUN_GET_CODEDESC

-- DESC: 字典转化,返回code(如'0102030405')+column_name

-- 对应的value(如:'001|010|110')

-- IN :

-- OUT :

-- HISTORY:16-JUL-2008 user CREATED

-- NOTE:

--====================================================================

FUNCTION FUN_GET_CODEDESC(P_CODE IN VARCHAR2, P_COLUMN_NAME IN VARCHAR2)

RETURN VARCHAR2 IS

X_TEMP_CODE VARCHAR2(2);

X_TEMP_VALUE VARCHAR2(100);

X_RETURN_VALUE VARCHAR2(1000) := '|';

X_LEN NUMBER := 0;

I INT := 1;

BEGIN

X_LEN := LENGTH(P_CODE);

-- 如果CODE是2位的,根据两个参数返回对应的VALUE

WHILE I <= X_LEN LOOP

X_TEMP_CODE := SUBSTR(P_CODE, I, 2);

BEGIN

SELECT DD.DTD_VALUE

INTO X_TEMP_VALUE

FROM DATA_DICTIONARY DD

WHERE DD.DTD_CODE = X_TEMP_CODE

AND DD.DTD_COLUMN_NAME = P_COLUMN_NAME;

EXCEPTION

WHEN NO_DATA_FOUND THEN

GOTO HERE;

END;

X_RETURN_VALUE := X_RETURN_VALUE || X_TEMP_VALUE || '|';

<

>

I := I + 2;

END LOOP;

X_RETURN_VALUE := SUBSTR(X_RETURN_VALUE, 2, LENGTH(X_RETURN_VALUE) - 2);

RETURN X_RETURN_VALUE;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END;

--==================================================================== -- NAME: FUN_GET_CODEDESC -- DESC: 字典转化,返回value(如:'001|010|110')+column_name对应的 -- code(如:‘010203’) -- IN : -- OUT : -- HISTORY:16-JUL-2008 user CREATED -- NOTE: --====================================================================

FUNCTION FUN_GET_VALUECODE(P_VALUE IN VARCHAR2, P_COLUMN_NAME IN VARCHAR2)

RETURN VARCHAR2

IS

TYPE TBBL_ARRAY IS TABLE OF USER_TABLES.TABLE_NAME%TYPE INDEX BY BINARY_INTEGER;

TYPE CUR_CURSOR IS REF CURSOR;

X_ARRAY TBBL_ARRAY;

X_CUR CUR_CURSOR;

X_NUM NUMBER := 1;

X_TEMP_VALUE_SQL VARCHAR2(1000);

X_TEMP_CODE VARCHAR2(1000);

BEGIN

X_TEMP_VALUE_SQL := 'SELECT DD.DTD_CODE FROM DATA_DICTIONARY DD

WHERE DD.DTD_COLUMN_NAME = ''' || P_COLUMN_NAME || ''' AND

DD.DTD_VALUE IN

(''' || REPLACE(P_VALUE, '|', ''',''') || ''')';

OPEN X_CUR FOR X_TEMP_VALUE_SQL;

LOOP

FETCH X_CUR

INTO X_ARRAY(X_NUM);

EXIT WHEN X_CUR%NOTFOUND;

X_TEMP_CODE := X_TEMP_CODE || X_ARRAY(X_NUM);

X_NUM := X_NUM + 1;

END LOOP;

CLOSE X_CUR;

RETURN X_TEMP_CODE;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END;

有什么不好的地方请大家指教!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值