这是我的疑问:
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的这种行为。我不正确地访问序列吗?
答案 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;
说实话,我倾向于设置触发器来设置id
,created_date
,created_by
,last_modified_date
和last_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, ?
)
SYSDATE
,而不是NOW()
)。