PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sekwencja w Oracle/PostgreSQL bez identyfikatora w instrukcji insert

Oracle 12c wprowadza Kolumny tożsamości :

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)
);

Jeśli chcesz to zrobić we wcześniejszych wersjach, będziesz potrzebować wyzwalacza i sekwencji:

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;
/

Następnie możesz po prostu zrobić (albo z kolumną tożsamości lub wyzwalaczem w połączeniu z sekwencją):

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można znaleźć połączenia Oracle, gdy zdefiniowane jest połączenie PostGIS

  2. sqlalchemy tworzenie VIEW z ORM

  3. Użyj INSERT ... ON CONFLICT NIC NIE ZWRACAJ nieudanych wierszy

  4. Czy PostgreSQL może wykonać łączenie między dwiema procedurami składowanymi SQL Server?

  5. Yii Framework:Nie można znaleźć tabeli dla aktywnej klasy rekordu w bazie danych