Oracle Apex - ID列不根据设置顺序递增,而是递增到“t1000”

yqhsw0fo  于 2023-05-06  发布在  Oracle
关注(0)|答案(1)|浏览(205)

我在oracle apex中创建了一个序列,并将该序列链接到应用程序端的行。但是,在master-detail表单上,当我尝试添加新的表单记录时,它不会自动增加到新的Roster_ID。我可能犯了什么错误?请帮帮忙
下面是我的代码:

CREATE TABLE ROSTER(
    Roster_ID NUMBER(5),
    Working_Hours NUMBER(2),
    Shift_Date DATE,
    Shift_End_Date DATE,
    Shift_ID NUMBER(5) REFERENCES Shift (Shift_ID),
    Ward_ID NUMBER(5) REFERENCES WARD (Ward_ID),
    Ward_Name VARCHAR2(25) REFERENCES WARD (Ward_Name),
    CONSTRAINT PK_ROSTER PRIMARY KEY (Roster_ID),
    CONSTRAINT CHECK_WORKING_HOURS CHECK (Working_Hours IN (6, 8, 12))
);

CREATE SEQUENCE Roster_seq START WITH 5 INCREMENT BY 1 NOCACHE NOCYCLE;

CREATE OR REPLACE TRIGGER Roster_T1
BEFORE
INSERT ON Roster
FOR EACH ROW
BEGIN
  IF :NEW.Roster_ID is NULL THEN 
    select Roster_seq.nextval into :NEW.Roster_ID from SYS.DUAL; 
  END IF; 
END;
/
COMMIT;
/

kkih6yb8

kkih6yb81#

不需要触发器你可以设置roster_id默认值为序列roster_seq
除此之外,将roster_id设置为

  • 隐藏列(使其不可见)
  • 主键
  • 值保护

如果您运行一个页面并添加一个新行,Apex将允许您输入所需的所有数据,并将新行与下一个序列值沿着保存在roster_id列中。
如果您想查看roster_id的值,那么创建一个新列,我们将其命名为roster_id_display,并将其设置为

  • 仅显示
  • 其源是名为ROSTER_ID数据库列,其数据类型为number
  • 将其仅查询属性设置为yes

现在一切正常:您可以输入新行并查看ID,但您不能(无论如何也不应该)通过交互式网格更改它。

相关问题