【发布时间】:2016-02-14 00:07:38
【问题描述】:
我有一个包含标识列的表的 Oracle 12c 数据库:
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:无法插入生成的始终标识列
ORA-06512: 在第 5 行
由于它对代码的可读性和可维护性非常好,我不想停止使用%ROWTYPE。由于我在任何情况下都不想允许除了自动生成的 ID 之外的任何内容,因此我不想解除 GENERATED ALWAYS 限制。
This 文章建议能够使用%ROWTYPE 的唯一方法是切换到GENERATED BY DEFAULT ON NULL。没有其他方法可以解决这个问题吗?
【问题讨论】:
-
GENERATED BY DEFAULT ON NULL有什么问题? -
@MatthewMcPeak 有人可以插入他们自己的
id,这不是序列的一部分。我不想允许这样做。
标签: oracle plsql oracle12c identity-column rowtype