我有包含标识列的表在Oracle数据库12C:如何在插入带有标识列的Oracle表时使用%ROWTYPE?
CREATE TABLE foo (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
bar NUMBER
)
现在我要插入到使用PL/SQL表。因为在实践中,表中有很多列,我使用%ROWTYPE
:
DECLARE
x foo%ROWTYPE;
BEGIN
x.bar := 3;
INSERT INTO foo VALUES x;
END;
但是,它给我这个错误:
ORA-32795: cannot insert into a generated always identity column
ORA-06512: at line 5
既然是代码的可读性和可维护性非常好,我不想停止使用%ROWTYPE
。由于我在任何情况下都不想允许任何内容,除了自动生成的ID,我不想解除GENERATED ALWAYS
限制。
This文章建议能够使用%ROWTYPE
的唯一方法是切换到GENERATED BY DEFAULT ON NULL
。有没有其他方法可以解决这个问题?
'GENERATED BY DEFAULT ON NULL''有什么问题? –
@MatthewMcPeak有人可以插入自己的“id”,这不是序列的一部分。我不想这样做。 – Anders