创建触发器和序列以创建新的主键

Creating a trigger and sequence to create a new primary key

我如何编写一个序列并在插入到 table 时触发将检查 ID 属性(和 INTEGER)是否为空。

如果为 null,它应该从 1 向上递增,检查值本身是否已经是主键,如果不是,则应该使用它作为插入的主键。

否则如果 id 不为空,它应该更新给定 id 处的行

到目前为止我有这个但我不确定

CREATE SEQUENCE create_student_id
START WITH 1
INCREMENT BY 1;

CREATE OR REPLACE TRIGGER new_student_id BEFORE
INSERT ON orders
    IF StudentID == null
    THEN
        FOR EACH ROW BEGIN
            :new.StudentID := create_student_id.nextval;
    END IF
--Need to update the table otherwise
    END;

您是否正在尝试实施更新插入方法?在触发器内部进行索引验证在我看来就像是在替换数据库的内部工作。但出于好奇,下面的代码片段展示了这个想法,但在并发情况下不起作用。

CREATE OR REPLACE TRIGGER new_student_id 
  BEFORE INSERT ON orders
FOR EACH ROW BEGIN
  DECLARE count 1 INT;
  IF StudentID == null THEN        
    WHILE (count != 0) LOOP 
      :new.StudentID := create_student_id.nextval;
      SELECT COUNT(1) INTO COUNT FROM orders WHERE StudentID = :new.StudentID
    END LOOP;
    -- If we got to this place the StudentID is now an usable key index 
  END IF;

--Need to update the table otherwise
END;