知识大全 oracle进制之间转换

Posted

篇首语:书到用时方恨少,事非经过不知难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle进制之间转换相关的知识,希望对你有一定的参考价值。

  CREATE OR REPLACE TYPE type_str_agg AS OBJECT

  (

  total VARCHAR ( )

  STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg)

  RETURN NUMBER

  MEMBER FUNCTION odciaggregateiterate

  (

  SELF  IN OUT type_str_agg

  VALUE IN VARCHAR

  ) RETURN NUMBER

  MEMBER FUNCTION odciaggregateterminate

  (

  SELF        IN type_str_agg

  returnvalue OUT VARCHAR

  flags       IN NUMBER

  ) RETURN NUMBER

  MEMBER FUNCTION odciaggregatemerge

  (

  SELF IN OUT type_str_agg

  ctx IN type_str_agg

  ) RETURN NUMBER

  )

  /

  CREATE OR REPLACE TYPE BODY type_str_agg IS

  STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg)

  RETURN NUMBER IS

  BEGIN

  sctx := type_str_agg(NULL);

  RETURN odciconst success;

  END;

  MEMBER FUNCTION odciaggregateiterate

  (

  SELF  IN OUT type_str_agg

  VALUE IN VARCHAR

  ) RETURN NUMBER IS

  BEGIN

  SELF total := SELF total || VALUE;

  RETURN odciconst success;

  END;

  MEMBER FUNCTION odciaggregateterminate

  (

  SELF        IN type_str_agg

  returnvalue OUT VARCHAR

  flags       IN NUMBER

  ) RETURN NUMBER IS

  BEGIN

  returnvalue := SELF total;

  RETURN odciconst success;

  END;

  MEMBER FUNCTION odciaggregatemerge

  (

  SELF IN OUT type_str_agg

  ctx IN type_str_agg

  ) RETURN NUMBER IS

  BEGIN

  SELF total := SELF total || ctx total;

  RETURN odciconst success;

  END;

  END;

  /

  CREATE OR REPLACE FUNCTION f_stragg(p_input VARCHAR ) RETURN VARCHAR

  PARALLEL_ENABLE

  AGGREGATE USING type_str_agg;

  /

  CREATE OR REPLACE PACKAGE pkg_number_trans IS

  FUNCTION f_bin_to_oct(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_bin_to_dec(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_bin_to_hex(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_oct_to_bin(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_oct_to_dec(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_oct_to_hex(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_hex_to_bin(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_hex_to_oct(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_hex_to_dec(p_str IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_dec_to_bin(p_int IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_dec_to_oct(p_int IN VARCHAR ) RETURN VARCHAR ;

  FUNCTION f_dec_to_hex(p_int IN VARCHAR ) RETURN VARCHAR ;

  END pkg_number_trans;

  /

  CREATE OR REPLACE PACKAGE BODY pkg_number_trans IS

  FUNCTION f_bin_to_oct(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_bin_to_oct

   对象描述: 二进制转换八进制

   输入参数: p_str 二进制字符串

   返回结果: 八进制字符串

   测试用例: SELECT pkg_number_trans f_bin_to_oct( ) FROM dual;

   备    注: 需要定义f_stragg函数和type_str_agg类型

  

  v_return VARCHAR ( );

  v_bin    VARCHAR ( );

  BEGIN

  v_bin := substr( || p_str * ceil(length(p_str) / ));

  SELECT f_stragg(data ) INTO v_return

  FROM (SELECT (CASE upper(substr(v_bin (rownum ) * + ))

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  END) data

  FROM dual

  CONNECT BY rownum <= length(v_bin) / );

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_bin_to_oct;

  FUNCTION f_bin_to_dec(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_bin_to_dec

   对象描述: 二进制转换十进制

   输入参数: p_str 二进制字符串

   返回结果: 十进制字符串

   测试用例: SELECT pkg_number_trans f_bin_to_dec( ) FROM dual;

  

  v_return  VARCHAR ( );

  BEGIN

  SELECT SUM(data ) INTO v_return

  FROM (SELECT substr(p_str rownum ) * power( length(p_str) rownum) data

  FROM dual

  CONNECT BY rownum <= length(p_str));

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_bin_to_dec;

  FUNCTION f_bin_to_hex(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_bin_to_hex

   对象描述: 二进制转换十六进制

   输入参数: p_str 二进制字符串

   返回结果: 十六进制字符串

   测试用例: SELECT pkg_number_trans f_bin_to_oct( ) FROM dual;

   备    注: 需要定义f_stragg函数和type_str_agg类型

  

  v_return VARCHAR ( );

  v_bin    VARCHAR ( );

  BEGIN

  v_bin := substr( || p_str * ceil(length(p_str) / ));

  SELECT f_stragg(data ) INTO v_return

  FROM (SELECT (CASE upper(substr(v_bin (rownum ) * + ))

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN A

  WHEN THEN B

  WHEN THEN C

  WHEN THEN D

  WHEN THEN E

  WHEN THEN F

  END) data

  FROM dual

  CONNECT BY rownum <= length(v_bin) / );

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_bin_to_hex;

  FUNCTION f_oct_to_bin(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_oct_to_bin

   对象描述: 八进制转换二进制

   输入参数: p_str 八进制字符串

   返回结果: 二进制字符串

   测试用例: SELECT pkg_number_trans f_oct_to_bin( ) FROM dual;

   备    注: 需要定义f_stragg函数和type_str_agg类型

  

  v_return VARCHAR ( );

  BEGIN

  SELECT to_char(to_number(f_stragg(data ))) INTO v_return

  FROM (SELECT (CASE upper(substr(p_str rownum ))

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  END) data

  FROM dual

  CONNECT BY rownum <= length(p_str));

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_oct_to_bin;

  FUNCTION f_oct_to_dec(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_oct_to_dec

   对象描述: 八进制转换十进制

   输入参数: p_str 八进制字符串

   返回结果: 十进制字符串

   测试用例: SELECT pkg_number_trans f_oct_to_dec( ) FROM dual;

  

  v_return  VARCHAR ( );

  BEGIN

  SELECT SUM(data ) INTO v_return

  FROM (SELECT substr(p_str rownum ) * power( length(p_str) rownum) data

  FROM dual

  CONNECT BY rownum <= length(p_str));

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_oct_to_dec;

  FUNCTION f_oct_to_hex(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_oct_to_bin

   对象描述: 八进制转换十六进制

   输入参数: p_str 八进制字符串

   返回结果: 十六进制字符串

   测试用例: SELECT pkg_number_trans f_oct_to_hex( ) FROM dual;

  

  v_return VARCHAR ( );

  v_bin    VARCHAR ( );

  BEGIN

  SELECT pkg_number_trans f_oct_to_bin(p_str) INTO v_bin FROM dual;

  SELECT pkg_number_trans f_bin_to_hex(v_bin) INTO v_return FROM dual;

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_oct_to_hex;

  FUNCTION f_dec_to_bin(p_int IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_dec_to_bin

   对象描述: 十进制转换二进制

   输入参数: p_str 十进制字符串

   返回结果: 二进制字符串

   测试用例: SELECT pkg_number_trans f_dec_to_bin( ) FROM dual;

  

  v_return VARCHAR ( );

  v_hex    VARCHAR ( );

  BEGIN

  SELECT pkg_number_trans f_dec_to_hex(p_int) INTO v_hex FROM dual;

  SELECT pkg_number_trans f_hex_to_bin(v_hex) INTO v_return FROM dual;

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_dec_to_bin;

  FUNCTION f_dec_to_oct(p_int IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_dec_to_oct

   对象描述: 十进制转换八进制

   输入参数: p_str 十进制字符串

   返回结果: 八进制字符串

   测试用例: SELECT pkg_number_trans f_dec_to_oct( ) FROM dual;

  

  v_return VARCHAR ( );

  v_bin    VARCHAR ( );

  BEGIN

  SELECT pkg_number_trans f_dec_to_bin(p_int) INTO v_bin FROM dual;

  v_bin := substr( || v_bin * ceil(length(v_bin) / ));

  SELECT f_stragg(data ) INTO v_return

  FROM (SELECT (CASE upper(substr(v_bin (rownum ) * + ))

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  END) data

  FROM dual

  CONNECT BY rownum <= length(v_bin) / );

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_dec_to_oct;

  FUNCTION f_dec_to_hex(p_int IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_dec_to_oct

   对象描述: 十进制转换十六进制

   输入参数: p_str 十进制字符串

   返回结果: 十六进制字符串

   测试用例: SELECT pkg_number_trans f_dec_to_hex( ) FROM dual;

  

  v_return VARCHAR ( );

  BEGIN

  SELECT upper(TRIM(to_char(p_int xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ))) INTO v_return FROM dual;

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_dec_to_hex;

  FUNCTION f_hex_to_bin(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_dec_to_oct

   对象描述: 十六进制转换二进制

   输入参数: p_str 十六进制字符串

   返回结果: 二进制字符串

   测试用例: SELECT pkg_number_trans f_hex_to_oct( A ) FROM dual;

  

  v_return VARCHAR ( );

  BEGIN

  SELECT to_char(to_number(f_stragg(data ))) INTO v_return

  FROM (SELECT (CASE upper(substr(p_str rownum ))

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN THEN

  WHEN A THEN

  WHEN B THEN

  WHEN C THEN

  WHEN D THEN

  WHEN E THEN

  WHEN F THEN

  END) data

  FROM dual

  CONNECT BY rownum <= length(p_str));

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_hex_to_bin;

  FUNCTION f_hex_to_oct(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_dec_to_oct

   对象描述: 十六进制转换八进制

   输入参数: p_str 十六进制字符串

   返回结果: 八进制字符串

   测试用例: SELECT pkg_number_trans f_hex_to_oct( A ) FROM dual;

  

  v_return VARCHAR ( );

  v_bin    VARCHAR ( );

  BEGIN

  SELECT pkg_number_trans f_hex_to_bin(p_str) INTO v_bin FROM dual;

  SELECT pkg_number_trans f_bin_to_oct(v_bin) INTO v_return FROM dual;

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_hex_to_oct;

  FUNCTION f_hex_to_dec(p_str IN VARCHAR ) RETURN VARCHAR IS

  

   对象名称: f_hex_to_dec

   对象描述: 十六进制转换十进制

   输入参数: p_str 十六进制字符串

   返回结果: 十进制字符串

   测试用例: SELECT pkg_number_trans f_hex_to_dec( A ) FROM dual;

  

  v_return  VARCHAR ( );

  BEGIN

  SELECT SUM(data ) INTO v_return

  FROM (SELECT (CASE upper(substr(p_str rownum ))

  WHEN A THEN

  WHEN B THEN

  WHEN C THEN

  WHEN D THEN

  WHEN E THEN

  WHEN F THEN

  ELSE substr(p_str rownum )

  END) * power( length(p_str) rownum) data

  FROM dual

  CONNECT BY rownum <= length(p_str));

  RETURN v_return;

  EXCEPTION

  WHEN OTHERS THEN

  RETURN NULL;

  END f_hex_to_dec;

  END pkg_number_trans;

cha138/Article/program/Oracle/201311/18912

相关参考