我有一个在SQL Server中使用的脚本,但需要将其转换为Oracle格式。谁能帮忙?
UPDATE PERSONS P SET
P.JOBTITLE=TE.JOBTITLE,
P.LAST_NAME=TE.LAST_NAME,
P.FIRST_NAME=TE.FIRST_NAME,
P.DBLOGIN_ID=TE.DBLOGIN_ID,
P.EMAIL_ID=TE.EMAIL_ID,
P.USERLEVEL=TE.USERLEVEL,
P.FACILITY_ID=TE.FACILITY_ID,
P.SUPERVISOR=TE.SUPERVISOR,
P.DEPARTMENT=TE.DEPARTMENT,
P.WINLOGINID=TE.WINLOGINID
FROM TEMP_ECOLAB_PERSONS TE
WHERE P.PERSON=TE.PERSON;
-在下面的文章中,我提出了以下声明。不幸的是,它仍然无法正常工作:
UPDATE (SELECT P.JOBTITLE, P.LAST_NAME, P.FIRST_NAME, P.DBLOGIN_ID, P.EMAIL_ID,
P.USERLEVEL, P.FACILITY_ID, P.SUPERVISOR, P.DEPARTMENT,
TE.JOBTITLE, TE.LAST_NAME, TE.FIRST_NAME, TE.DBLOGIN_ID, TE.EMAIL_ID,
TE.USERLEVEL, TE.FACILITY_ID, TE.SUPERVISOR, TE.DEPARTMENT
FROM PERSONS P, TEMP_ECOLAB_PERSONS TE WHERE P.PERSON=TE.PERSON)
SET
P.JOBTITLE=TE.JOBTITLE,
P.LAST_NAME=TE.LAST_NAME,
P.FIRST_NAME=TE.FIRST_NAME,
P.DBLOGIN_ID=TE.DBLOGIN_ID,
P.EMAIL_ID=TE.EMAIL_ID,
P.USERLEVEL=TE.USERLEVEL,
P.FACILITY_ID=TE.FACILITY_ID,
P.SUPERVISOR=TE.SUPERVISOR,
P.DEPARTMENT=TE.DEPARTMENT;
这就是我要这样做的方式。它可能不是最佳性能,但它可以工作。
MERGE INTO PERSONS_TMP PT
USING (
SELECT P.PERSON, P.JOB_TITLE, P.FIRST_NAME, P.LAST_NAME, P.FACILITY_ID
FROM PERSONS P) TMP
ON (PT.PERSON = TMP.PERSON)
WHEN MATCHED THEN
UPDATE SET
PT.FACILITY_ID = TMP.FACILITY_ID,
PT.JOB_TITLE = TMP.JOB_TITLE,
PT.FIRST_NAME = TMP.FIRST_NAME,
PT.LAST_NAME = TMP.LAST_NAME;
上面的脚本将使用PERSONS表中的数据更新PERSONS_TMP表中的信息。我相信您的情况,反之亦然。因此,请确保在运行脚本之前进行了必要的更改。
您可以在上面的SQL中添加“ WHEN NOT MATCHED THEN ....”子句,以防您需要插入新记录(如果不存在的话。)>
UPDATE PERSONS P
SET (jobtitle,
last_name,
first_name,
dblogin_id,
email_Id,
userlevel,
facility_id,
supervisor,
department,
winloginid) = (select jobtitle,
last_name,
first_name,
dblogin_id,
email_Id,
userlevel,
facility_id,
supervisor,
department,
winloginid
from TEMP_ECOLAB_PERSONS TE
where TE.PERSON=P.PERSON);
或者我们可以使用