繁体   English   中英

在表b中插入丢失的行并更新表a

[英]Insert missing rows in table b and update table a

我有2个表: user_accountemail_validation user_account具有user_idemailemail_validation_id email_validation具有email_validation_iduser_account_idemail

以正常正确的方式,对于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

您可以执行更新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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM