假设我在表column_1,column_2,column_3
中有3列。
我想为table_1.column_unique_ind
的每个唯一组合填充两个新表table_2.column_unique_ind
和column_1,column_2,column_3
,其中包含唯一值。
我想稍后比较这两列,以检查column_1,column_2,column_3的唯一组合。
在这种情况下我是否可以使用内置的oracle函数?
我想要的是,
答案 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;
分享并享受。