-5

如何IDNumber为此示例输出添加 SQL:

 1300000001,1300000002,1300000003,13......

前两位数字必须是当前年份的最后两位数字,而后 8 位数字idnumber必须是自动编号或序列号,例如00000001,00000002,00000003,00000004..

因为它将作为学生表的主键..

tnx的帮助..

4

1 回答 1

1

这是我生成 ID 的方式:

CREATE OR REPLACE TRIGGER GEN_ID BEFORE INSERT ON DEMO FOR EACH ROW
DECLARE
    TEMP_ID VARCHAR(10);
    HIGHEST_NUM NUMBER;
    N NUMBER;
    NUM_OF_DIGITS NUMBER;
BEGIN
    SELECT NVL(MAX(EMPNO),0)+1 INTO HIGHEST_NUM FROM DEMO;
    N:=HIGHEST_NUM;
    NUM_OF_DIGITS :=0;
    WHILE N!=0
    LOOP
        NUM_OF_DIGITS := NUM_OF_DIGITS + 1;
        N := TRUNC(N/10);
    END LOOP;
    TEMP_ID :='P';
    FOR I IN 1..(5-NUM_OF_DIGITS-1)
    LOOP
        TEMP_ID:=TEMP_ID||0;
    END LOOP;
    TEMP_ID := TEMP_ID||HIGHEST_NUM;
    :NEW.EMPNO := TEMP_ID;
END;
/

使用这个逻辑我有一个角色,所以我使用连接。这可能是一种方式。我在 Oracle 中厌倦了这个,不确定 C#。

这就是逻辑。

您需要生成一个序列,其中当前值取决于前一个ID对吗?所以,

第一步是获取最后使用的 id 值。这可以使用 MAX(column) 然后将最大数字加一,这是您想要的序列号,即 1,2,3....等等。

第 2 步:得到数字后,计算数字中存在的位数

第 3 步:您必须生成一个 10 位数字,前 2 位数字将是 2014 年 12 月 13 日,具体取决于年份。因此,您需要获取当前年份的最后 2 位数字。

第四步:加上10-2[as 2 digits of year]——序列最大值的位数,存储为id。

第 5 步:将最大值与 id 连接起来。

于 2013-03-15T08:51:02.387 回答