auw*_*all 2 java oracle prepared-statement
好吧我说我有一个有两列的表.Entry_id和名称.Entry_id是ROWID NOT NULL.基本上我只是希望它在每次放入新内容时都会增加.我如何在PreparedStatement中执行此操作.我不会知道正确的Entry_id bc无关紧要.它应该每次都增加.因此,如果我可以将名称插入表中并且entry_id自动递增,那将是很好的.知道怎么做吗?
ROWID是表中行的物理地址.将ROWID用作键是没有意义的 - 如果将表从一个表空间移动到另一个表空间,如果执行导出和导入,如果发生行移动等,则ROWID将随时间而变化.等等有意义的是增加一个ROWID,因为结果很可能是无效的,因为它不再是实际行的物理地址,或者它不再是有效的物理地址.
如果要在Oracle中使用自动递增主键,则应将该列声明为NUMBER,而不是ROWID.然后,您将创建一个序列对象
CREATE SEQUENCE entry_id_seq
START WITH 1
INCREMENT BY 1
CACHE 100;
Run Code Online (Sandbox Code Playgroud)
并NEXTVAL在你的INSERT陈述中引用该序列
INSERT INTO entry( entry_id, name )
VALUES( entry_id_seq.nextval, :1 );
Run Code Online (Sandbox Code Playgroud)
当然,您可以创建一个before-insert触发器来填充序列中的主键
CREATE OR REPLACE TRIGGER get_entry_id
BEFORE INSERT ON entry
FOR EACH ROW
IS
BEGIN
SELECT entry_id_seq.nextval
INTO :new.entry_id
FROM dual;
END;
Run Code Online (Sandbox Code Playgroud)
INSERT然后,您的语句可以省略该ENTRY_ID列,让触发器自动填充它.
INSERT INTO entry( name )
VALUES( :1 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7164 次 |
| 最近记录: |