根据表的3列值获取唯一的哈希值

时间:2014-07-30 08:41:43

标签: oracle plsql oracle11g

假设我在表column_1,column_2,column_3中有3列。

我想为table_1.column_unique_ind的每个唯一组合填充两个新表table_2.column_unique_indcolumn_1,column_2,column_3,其中包含唯一值。

我想稍后比较这两列,以检查column_1,column_2,column_3的唯一组合。

在这种情况下我是否可以使用内置的oracle函数?

我想要的是,

  1. 对于column_1,column_2,column_3的任何给定组合     函数应始终返回相同的唯一值,我使用此函数的任何一天。
  2. 对于column_1,column_2,column_3的两种不同组合     函数应始终返回不同的值

2 个答案:

答案 0 :(得分:1)

我没有内置的Oracle功能,我知道这些功能可以满足您的需求。以下是我如何处理它(根据需要更改变量大小/类型/分隔符)。

创建一个功能来构建唯一ID,以便您可以根据需要重新使用它来获取这些ID。

FUNCTION get_unique_id(val_1_in VARCHAR2, val_2_in VARCHAR2, val_3_in VARCHAR2) RETURN VARCHAR2
AS
    unique_id VARCHAR2(4000);
    delimiter_l CONSTANT VARCHAR2(1) := '|';
BEGIN
    unique_id := val_1_in || delimiter_l || val_2_in || delimiter_l || val_3_in;

    return unique_id;
END;

现在,加载你的表。我用临时表对它进行了测试,结果很有效。

DECLARE
  unique_id_l VARCHAR2(4000); --consider using table_1.column_unique_id%TYPE
BEGIN
FOR rec in 
   ( --use your 3 columns here you want to make the unique value
    SELECT col_1, col_2, col_3
    FROM source_table
    GROUP BY col_1, col_2, col_3 --this GROUP BY will insure uniqueness
   )
    LOOP
        unique_id_l := get_unique_id(rec.col_1, rec.col_2, rec.col_3); --use your function to build the unique ID we want to submit into the new tables

        INSERT INTO table_1 (column_unique_id)
        VALUES (unique_id_l);
    END LOOP;

END;

答案 1 :(得分:0)

使用CONCAT功能:

DECLARE
  n1  NUMBER := 1234;
  n2  NUMBER := 567;
  n3  NUMBER := 890;
  c   VARCHAR2(2000);
BEGIN
  c := CONCAT(CONCAT(n1, '|'), CONCAT(CONCAT(n2, '|'), CONCAT(n3, '|')));
  DBMS_OUTPUT.PUT_LINE('''' || c || '''');
END;

分享并享受。