我正在研究数据库,并希望实现一个系统,通过组合其他几个ID /因子生成表唯一ID。基本上,我想要一个看起来像这样的ID:
所以ID看起来像:
1234101234
此外,每个“条目”将具有存储在另一个表中的多个时间敏感实例。对于这些ID,我想获取上述ID并附加时间戳,因此它看起来像:
12341012341234567890123
我看了一下PSQL序列,但看起来它们主要用于在某些级别上升或下降,我不知道如何在创建ID字符串时进行这种连接或者是否可能。
答案 0 :(得分:3)
不要这样做!只需使用序列主键ID,然后有三个不同的列:
otherTableID
otherTable2ID
timestamp
您可以使用序列ID唯一标识每一行。您可以查找其他信息。并且 - 甚至更好 - 您可以创建外键约束来表示表之间的关系。
答案 1 :(得分:0)
在PLSQL(Oracle服务器)中,您可以使用(||)双管线
添加三列答案 2 :(得分:0)
我不确定你想要做什么,但是
SELECT col_1::text || col_2::text || col_3::text || now()::text
应该有效。您还应该在列上添加UNIQUE约束,即
ALTER TABLE this_table ADD UNIQUE INDEX (this_new_column);
但真正的问题是:你为什么要这样做?如果您只想要一个唯一无意义的ID,则只需要创建serial类型的列。
答案 3 :(得分:0)
create procedure f_return_unq_id(
CONDITIONAL_PARAMS IN INTEGER,
v_seq in out integer
)
is
QUERY_1 VARCHAR2(200);
RESP INTEGER;
BEGIN
QUERY_1:='SELECT TAB1.SL_ID||TAB2.SL_ID||:v_seq||SYSTIMESTAMP FROM TABLE1 TAB1,TABLE2 TAB2 WHERE TAB1.CONDITION=:V_PARAMS';
BEGIN
EXECUTE IMMEDIATE QUERY_1 INTO RESP USING v_seq,CONDITIONAL_PARAMS;
EXCEPTION
when others then
DBMS_OUTPUT.PUT_LINE(SQLCODE);
END;
v_seq:=RESP;
EXCEPTION
when others then
DBMS_OUTPUT.PUT_LINE(SQLCODE);
END;
pass the v_seq to this procedure as your sequence number 1000-9999 and conditional parameters if any are there.