创建触发器和序列以创建新的主键
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;
我如何编写一个序列并在插入到 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;