[英]Insert missing rows in table b and update table a
I have 2 tables: user_account
and email_validation
. 我有2个表: user_account
和email_validation
。 user_account
has user_id
, email
and email_validation_id
. user_account
具有user_id
, email
和email_validation_id
。 email_validation
has email_validation_id
, user_account_id
, and email
. email_validation
具有email_validation_id
, user_account_id
和email
。
In normal and correct way, for each user in user_account
(for example [user_id="123", email="user@domain.com", email_validation_id="456"]
) there is a row in email_validation
(for example [email_validation_id="456", user_account_id="123", email="user@domain.com"]
). 以正常正确的方式,对于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"]
)。
But, some things got wrong and now I have users with no email validation. 但是,有些事情出了问题,现在我的用户没有电子邮件验证。 So, I would like to add rows manually: for each user from user_account
which don't have a row in email_validation
(ie no row with it's user_id
) insert [email_validation_id=<The current max of (email_validation.email_validation_id) + 1>, user_account_id=<user_account.user_id>, email=<user_account.email>]
and update the user_account.email_validation_id
to <email_validation.email_validation_id>
. 因此,我想手动添加行:对于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>
。
I have no idea how to approach this :\\ 我不知道如何解决这个问题:
Thank you for your time! 感谢您的时间!
If I had understood everything correctly this could help. 如果我正确理解了所有内容,则可能会有所帮助。
To create/insert missing email validation you can do. 要创建/插入丢失的电子邮件验证,您可以执行。
INSERT INTO email_validation(user_account_id, email)
SELECT user_id, email
FROM user_account WHERE email_validation_id is null;
To auto increase the id you can do. 要自动增加ID,您可以执行。
Table definition: 表定义:
CREATE TABLE tablename
(
id NUMBER(10)
);
ALTER TABLE tablename ADD (CONSTRAINT tbn_pk PRIMARY KEY (id));
CREATE SEQUENCE tbn_seq START WITH 1;
Or you can use Identity
Columns is available from Oracle 12c+. 或者,您可以使用Oracle 12c +提供的“ Identity
列”。
CREATE TABLE tablename
(
id NUMBER GENERATED ALWAYS AS IDENTITY
);
Trigger definition: 触发定义:
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;
/
To update the user_account.email_validation_id you can do. 您可以执行更新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;
/
I hope I was able to help you. 希望我能为您提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.