oracle pl/sql 12 C- MERGE INTO输出错误无法更新ON子句中引用的列IU.LOGIN

wyyhbhjk  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(299)

我不明白我在pl/sql 12 c中遇到的问题,代码如下:

MERGE INTO ident_utilisateur iu
USING users us
ON ((regexp_substr (iu.LOGIN, '[^_]+', 1)) = TO_CHAR(us.cnbf))
WHEN MATCHED THEN 
UPDATE
SET
iu.login = (regexp_substr (iu.login, '[^_]+', 1)),
iu.email_contact = (regexp_substr (iu.email_contact, '[^_]+', 1)),
iu.valide = 1,
iu.date_fin = ''
WHERE iu.login LIKE '%_LOG_%' 
AND iu.login NOT LIKE '%AUT_LOG%'

(iu.LOGIN实际上看起来像“169_LOG_04/10/2022”,正则表达式输出“169”与us.cnbf看起来像“169”)
此代码应为error Columns referenced in the ON Clause cannot be update IU.LOGIN
供参考:此代码可以工作,但它不能JOIN用户表

update ident_utilisateur iu
set
iu.login = (regexp_substr (iu.login, '[^_]+', 1)),
iu.email_contact = (regexp_substr (iu.email_contact, '[^_]+', 1)),
iu.valide = 1,
iu.date_fin = ''
--FROM ident_utilisateur iu
--INNER JOIN users us ON (regexp_substr (iu.login, '[^_]+', 1)) = TO_CHAR(us.CNBF)
WHERE iu.login LIKE '%_LOG_%'
AND iu.login NOT LIKE '%AUT_LOG%'

如果我取消注解From和INNER行,它将输出SQL command not properly ended
真的谢谢你的帮助!
特里

xoshrz7s

xoshrz7s1#

试试看:

update ident_utilisateur iu
set
iu.login = (regexp_substr (iu.login, '[^_]+', 1)),
iu.email_contact = (regexp_substr (iu.email_contact, '[^_]+', 1)),
iu.valide = 1,
iu.date_fin = ''
WHERE iu.login LIKE '%_LOG_%'
AND iu.login NOT LIKE '%AUT_LOG%'
AND exists (select null from users us where regexp_substr (iu.login, '[^_]+', 1) = TO_CHAR(us.CNBF))

相关问题