[英]Insert missing rows in table b and update table a
我有2個表: user_account
和email_validation
。 user_account
具有user_id
, email
和email_validation_id
。 email_validation
具有email_validation_id
, user_account_id
和email
。
以正常正確的方式,對於user_account
每個用戶(例如[user_id="123", email="user@domain.com", email_validation_id="456"]
),在email_validation
有一行(例如[email_validation_id="456", user_account_id="123", email="user@domain.com"]
)。
但是,有些事情出了問題,現在我的用戶沒有電子郵件驗證。 因此,我想手動添加行:對於user_account
中每個在user_account
中沒有一行的email_validation
(即,沒有一行是user_id
),請插入[email_validation_id=<The current max of (email_validation.email_validation_id) + 1>, user_account_id=<user_account.user_id>, email=<user_account.email>]
,並將user_account.email_validation_id
更新為<email_validation.email_validation_id>
。
我不知道如何解決這個問題:
感謝您的時間!
如果我正確理解了所有內容,則可能會有所幫助。
要創建/插入丟失的電子郵件驗證,您可以執行。
INSERT INTO email_validation(user_account_id, email)
SELECT user_id, email
FROM user_account WHERE email_validation_id is null;
要自動增加ID,您可以執行。
表定義:
CREATE TABLE tablename
(
id NUMBER(10)
);
ALTER TABLE tablename ADD (CONSTRAINT tbn_pk PRIMARY KEY (id));
CREATE SEQUENCE tbn_seq START WITH 1;
或者,您可以使用Oracle 12c +提供的“ Identity
列”。
CREATE TABLE tablename
(
id NUMBER GENERATED ALWAYS AS IDENTITY
);
觸發定義:
CREATE SEQUENCE tbn_seq START WITH 1;
CREATE OR REPLACE TRIGGER tbn_id_insert BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT tbn_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
您可以執行更新user_account.email_validation_id的操作。
DECLARE
v_email_validation_id user_account.email_validation_id%TYPE;
BEGIN
FOR user_account_rec IN (SELECT * FROM user_account WHERE email_validation_id is NULL)
LOOP
SELECT email_validation_id
INTO v_email_validation_id
FROM email_validation
WHERE user_account_id = user_account_rec.user_id;
UPDATE user_account
SET email_validation_id = v_email_validation_id
where user_id = user_account_rec.user_id;
END LOOP;
END;
/
希望我能為您提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.