如何在两列上设置相同的序列号



我正在使用 oracle 中的一个序列在 id 列中存储增量值,并且在插入触发器之前设置了,但现在由于某种原因我需要在同一表中的 id1 列中存储相同的值。

请让我知道我该怎么做。

既然你提到了一个trigger,我想你需要了解PL/SQL语法。 链接中提到的重要部分是,每次引用伪列时currvalnextval

PL/SQL评估每次出现的sequence_name。库尔瓦尔和 sequence_name。NEXTVAL(与计算序列的SQL不同 表示它出现的每一行(。

出于您的目的,请注意在触发器中只使用nextval一次。

插入的示例;触发器的代码将类似。 我错了;此语法是在 11g 中引入的,因此这应该适用于大多数人:

BEGIN
INSERT INTO employees_temp (employee_id, dup_id, first_name, last_name)
VALUES (employees_seq.NEXTVAL, employees_seq.CURRVAL, 'Lynette', 'Smith');
END;
/ 

请注意在第二个VALUES参数中使用CURRVAL

我建议在这种情况下使用virtual column

虚拟列数据是动态生成的。

COL2 NUMBER,
COL3 NUMBER GENERATED ALWAYS AS COL2 VIRTUAL

在这种情况下,COL3将始终等于COL2

如果确实需要成为trigger的一部分,那么您只需将seq.nextval分配给一个变量并将该变量用于两列即可。

干杯!!

在触发器中,您应该使用 INSERT...返回语法。例如

DECLARE
nID_some_table  NUMBER;
BEGIN
INSERT INTO SOME_TABLE (ID_SOME_TABLE, SOMETHING_ELSE, YA_DA_YA_DA)
VALUES (SOME_TABLE_SEQ.NEXTVAL, 'bleah-blah-blort', 'ya-da-ya-da-ya-da')
RETURNING ID_SOME_TABLE INTO nID_some_table;
-- Now use ID_some_table for some other purpose
UPDATE SOME_OTHER_TABLE
SET ID_SOME_TABLE = nID_some_table
WHERE ID_SOME_OTHER_TABLE = nHeaven_only_knows;
END;

最新更新