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 || &apos;|&apos;;
        <
 
 
  
  >
        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(如:&apos;001|010|110&apos;)+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 := &apos;SELECT DD.DTD_CODE  FROM DATA_DICTIONARY DD
                 WHERE DD.DTD_COLUMN_NAME = &apos;&apos;&apos; || P_COLUMN_NAME || &apos;&apos;&apos; AND 
                 DD.DTD_VALUE IN  
                 (&apos;&apos;&apos; || REPLACE(P_VALUE, &apos;|&apos;, &apos;&apos;&apos;,&apos;&apos;&apos;) || &apos;&apos;&apos;)&apos;;

      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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值