Oracle

在 OracleDB 中使用 SELECT DISTINCT 時如何生成和插入主鍵?

  • May 31, 2018

使用查詢時如何插入(或生成和插入)主鍵SELECT DISTINCT

如果我有一張這樣的桌子:

CREATE TABLE testUser(
   username VARCHAR2(50 CHAR),
   email VARCHAR2(50 CHAR)
)

我有一些customer_orders包含這些數據的表格,我可以使用以下方法快速填充它:

INSERT INTO testUser(username, email)
SELECT DISTINCT user_name, user_email
FROM customer_info;

但是,如果我有這張桌子:

CREATE TABLE users(
  id NUMBER,
  user_name VARCHAR2(50 CHAR),
  user_email VARCHAR2(50 CHAR)
)

並嘗試使用相同的方法(SELECT DISTINCT INSERT方法)我會得到一個錯誤,如ORA-01400: cannot insert NULL into ("MYDB"."USERS"."ID").

這是有道理的,因為主鍵為空,我如何自動生成主鍵在1-n哪裡?n``COUNT(SELECT DISTINCT user_name)

讓數據庫為您生成它(身份列,12c 功能):

CREATE TABLE users(
  id NUMBER generated always as identity, -- <= HERE
  user_name VARCHAR2(50 CHAR),
  user_email VARCHAR2(50 CHAR)
);

如果您仍在使用 12c 以下的版本,那麼您可以簡單地使用rownum

INSERT INTO testUser(id, username, email)
SELECT rownum, sq.* from
(select DISTINCT user_name, user_email
FROM customer_info) sq;

或者一個序列:

create sequence s1;
INSERT INTO testUser(id, username, email)
SELECT s1.nextval, sq.* from
(select DISTINCT user_name, user_email
FROM customer_info) sq;

或觸發器,如此處所述:https ://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle

引用自:https://dba.stackexchange.com/questions/208416