他的。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用when子句,以

他的。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用when子句,以,oracle,Oracle,他的。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用when子句,以避免在调用SQL上下文中已填充id时运行其代码。虽然没有太大的改进,但在开发人员不懒惰的情况下,对DB有一定的缓解作用。:-)Thanx为了您的建议,我按照您的建议编辑了示例代码Jakob,基于触发器的序列生成具有重上下文切换的所有性能相关危险



他的。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用
when
子句,以避免在调用SQL上下文中已填充
id
时运行其代码。虽然没有太大的改进,但在开发人员不懒惰的情况下,对DB有一定的缓解作用。:-)Thanx为了您的建议,我按照您的建议编辑了示例代码Jakob,基于触发器的序列生成具有重上下文切换的所有性能相关危险。对于每一行,它执行两个不必要的开关,而实际上不需要开关。我不建议这样做。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用
when
子句,以避免在调用SQL上下文中已填充
id
时运行其代码。虽然没有太大的改进,但在开发人员不懒惰的情况下,对DB有一定的缓解作用。:-)Thanx为了您的建议,我按照您的建议编辑了示例代码Jakob,基于触发器的序列生成具有重上下文切换的所有性能相关危险。对于每一行,它执行两个不必要的开关,而实际上不需要开关。我不建议这样做。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用
when
子句,以避免在调用SQL上下文中已填充
id
时运行其代码。虽然没有太大的改进,但在开发人员不懒惰的情况下,对DB有一定的缓解作用。:-)Thanx为了您的建议,我按照您的建议编辑了示例代码Jakob,基于触发器的序列生成具有重上下文切换的所有性能相关危险。对于每一行,它执行两个不必要的开关,而实际上不需要开关。我不建议这样做。最好在插入中直接使用序列。开发人员的懒惰不是借口。当我们将一个遗留应用程序从SQL Server(带有标识列)移植到Oracle时,我们使用了这种方法。在我们目前的环境中,序列是直接使用的。这很有意义,谢谢您的解释。我建议对触发器使用
when
子句,以避免在调用SQL上下文中已填充
id
时运行其代码。虽然没有太大的改进,但在开发人员不懒惰的情况下,对DB有一定的缓解作用。:-)谢谢你的建议,我按照你的建议编辑了示例代码+rownum正在为我工作。谢谢+rownum为我工作。谢谢+rownum为我工作。谢谢+rownum为我工作。谢谢!
create table test (
  iD number primary key,
  name varchar2(10)
);


insert into test values (123, 'xxx');
insert into test values (124, 'yyy');
insert into test values (125, 'xxx');
insert into test values (126, 'xxx');
insert into test
(
   select (SELECT MAX (id) + 1 FROM  test) as id,
   name from test
  where name='xxx'
 );
insert into test (
   select (SELECT MAX (id) FROM  test) + rownum as id,
   name from test
  where name='xxx'
 );
CREATE TABLE "MY_TABLE" 
(   
  "MY_ID" NUMBER(10,0) CONSTRAINT PK_MY_TABLE PRIMARY KEY , 
  "MY_COLUMN" VARCHAR2(100)
);
/ 
CREATE SEQUENCE  "S_MY_TABLE" 
MINVALUE 1 MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 10 NOCACHE  ORDER  NOCYCLE  NOPARTITION ;
/
 CREATE OR REPLACE TRIGGER "T_MY_TABLE" 
  BEFORE INSERT
  ON
  MY_TABLE
  REFERENCING OLD AS OLDEST NEW AS NEWEST
  FOR EACH ROW
    WHEN (NEWEST.MY_ID IS NULL)
DECLARE
   IDNOW NUMBER;
  BEGIN
    SELECT  S_MY_TABLE.NEXTVAL INTO IDNOW FROM DUAL;
    :NEWEST.MY_ID := IDNOW;
  END;

/
ALTER TRIGGER "T_MY_TABLE" ENABLE;
/
insert into MY_TABLE (MY_COLUMN) values ('DATA1');
insert into MY_TABLE (MY_COLUMN) values ('DATA2');
insert into MY_TABLE (MY_ID, MY_COLUMN) values (S_MY_TABLE.NEXTVAL, 'DATA3');
insert into MY_TABLE (MY_ID, MY_COLUMN) values (S_MY_TABLE.NEXTVAL, 'DATA4');
insert into MY_TABLE (MY_COLUMN) values ('DATA5');
/
select * from MY_TABLE;