将序列值插入Oracle表时ORA-02287

时间:2015-03-21 14:10:18

标签: sql oracle

这是我的疑问:

INSERT INTO MY_TABLE(
    ID,
    FILE,
    URL,
    CREATED_DATE,
    CREATED_BY,
    LAST_MODIFIED_DATE,
    LAST_MODIFIED_BY
) VALUES (
    (SELECT mytable_seq.nextval FROM DUAL), ?, ?, 
    (SELECT NOW() FROM DUAL), ?, (SELECT NOW() FROM DUAL), ?
)

运行此查询时出现此错误:

ORA-02287:此处不允许使用序列号

发生了什么?我的背景不是Oracle,但我还记得,我没有看到PostgreSQL的这种行为。我不正确地访问序列吗?

2 个答案:

答案 0 :(得分:3)

我倾向于使用insert . . . select

INSERT INTO MY_TABLE(ID, FILE, URL, CREATED_DATE, CREATED_BY, LAST_MODIFIED_DATE,
                     LAST_MODIFIED_BY)
    SELECT mytable_seq.nextval, ?, ?, sysdate, ?, sysdate, ?
    FROM dual;

说实话,我倾向于设置触发器来设置idcreated_datecreated_bylast_modified_datelast_modified_by 。这似乎是确保这些列具有您真正想要的信息的最佳方式。

答案 1 :(得分:2)

您不需要SELECT语句,

INSERT INTO MY_TABLE(
    ID,
    FILE,
    URL,
    CREATED_DATE,
    CREATED_BY,
    LAST_MODIFIED_DATE,
    LAST_MODIFIED_BY
) VALUES (
    mytable_seq.nextval, ?, ?, 
    sysdate, ?, sysdate, ?
)
  • 您可以直接访问序列。
  • 当前日期相同(在Oracle中为SYSDATE,而不是NOW())。