2番目のテーブルの更新された値で1つのテーブルの値を更新しようとしています。しかし、私は最初のテーブルのMODIFIED_BYとMODIFIED_ON列を更新しておりますので、私は唯一の更新された値がある行更新する:条件付き相関更新
UPDATE SAFETY_ADMIN.SAFETY_USERS tbl1
SET (SUPERVISOR_ID,DEPT_ID,USER_ID,EMPLOYEE_TYPE,EMPLOYEE_NAME,EMAIL,MODIFIED_BY,MODIFIED_ON) =
(
SELECT SAFETY_ADMIN.FN_GETSUPERVISORID(tbl2.SUPID),CAST(tbl2.DEPTID AS NUMBER(19)),UPPER(SUBSTR(tbl2.EMAIL,1,INSTR(tbl2.EMAIL,'@')-1)),tbl2.EMPTYPE,tbl2.EMPNAME,tbl2.EMAIL,SYS_CONTEXT('USERENV', 'OS_USER'),CURRENT_TIMESTAMP
FROM PS_LOAD.EMPLOYEEDATA tbl2
WHERE tbl1.EMPLOYEE_ID = CAST(tbl2.EMPID AS NUMBER(19)) AND
(
tbl1.SUPERVISOR_ID <> SAFETY_ADMIN.FN_GETSUPERVISORID(tbl2.SUPID) OR
tbl1.DEPT_ID <> CAST(tbl2.DEPTID AS NUMBER(19)) OR
tbl1.USER_ID <> UPPER(SUBSTR(tbl2.EMAIL,1,INSTR(tbl2.EMAIL,'@')-1)) OR
tbl1.EMPLOYEE_TYPE <> tbl2.EMPTYPE OR
tbl1.EMPLOYEE_NAME <> tbl2.EMPNAME OR
tbl1.EMAIL <> tbl2.EMAIL
)
);
をしかし、私のクエリは、NULL値でDEPT_IDを更新文句ヌル値は存在しません。私はWHERE条件を間違った場所に置いていると感じています。私はSQL Serverのより多くの人です。誰かがOracleでこれを行う方法を教えてもらえますか?他のテーブルからデータを取得する必要がOracleのアップデートで
これはまさに私が探していたもので、期待どおりに動作しました! :)あまりにもPL/SQLがひどいです。このクエリはMS SQL Serverの半分のサイズになります。 –
@David:PL/SQLはありません。 SQLのみ。 – sstan
@DavidPは 'NULL'値を監視します。たとえば、 'SAFETY_USERS'で' EMAIL'が 'NULL'で、' EMPLOYEEDATA'に値がある場合、行は更新されません。 –