sql >> Databasteknik >  >> RDS >> PostgreSQL

Sekvens i Oracle/PostgreSQL utan ID i insert-satsen

Oracle 12c introducerar Identitetskolumner :

CREATE TABLE SOMEUSERS (
  SOMEUSERS_ID       NUMBER(10) GENERATED ALWAYS AS IDENTITY
                     CONSTRAINT SOMEUSERS__SOMEUSERS_ID__PK PRIMARY KEY,
  SOMEUSERS_NAME     VARCHAR2(50)
                     CONSTRAINT SOMEUSERS__SOMEUSERS_NAME__NN NOT NULL,
  SOMEUSERS_PASSWORD VARCHAR2(50)
);

Om du vill göra det i tidigare versioner behöver du en trigger och en sekvens:

CREATE TABLE SOMEUSERS (
  SOMEUSERS_ID       NUMBER(10)
                     CONSTRAINT SOMEUSERS__SOMEUSERS_ID__PK PRIMARY KEY,
  SOMEUSERS_NAME     VARCHAR2(50)
                     CONSTRAINT SOMEUSERS__SOMEUSERS_NAME__NN NOT NULL,
  SOMEUSERS_PASSWORD VARCHAR2(50)
);
/

CREATE SEQUENCE gen_id_someUsers START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
/

CREATE OR REPLACE TRIGGER SOMEUSERS__ID__TRG 
BEFORE INSERT ON SOMEUSERS
FOR EACH ROW
BEGIN
  :new.SOMEUSERS_ID := gen_id_someUsers.NEXTVAL;
END;
/

Du kan sedan bara göra (antingen med identitetskolumnen eller triggern kombinerad med din sekvens):

INSERT INTO SOMEUSERS (
  SOMEUSERS_NAME,
  SOMEUSERS_PASSWORD
) VALUES (
  'Name',
  'Password'
);


  1. Oracle Query för att samla QTY efter år - endast senaste 3 åren

  2. Hur man aktiverar alla begränsningar för kontroll och främmande nyckel i en databas i SQL Server (T-SQL-exempel)

  3. Prestanda av yttre applicera med funktion

  4. Hur får jag IDENTITY / AUTONUMBER-värdet för raden jag infogade i pymysql