sql >> Database teknologi >  >> RDS >> Oracle

Opdater tabel fra en anden tabel i Oracle

I dette tilfælde skal du bruge MERGE-sætningen som nedenfor:

DECLARE
  l_date DATE:=TO_DATE('01/04/2017','DD/MM/YYYY');
BEGIN
  LOOP
    EXECUTE IMMEDIATE 'MERGE INTO EMPSHIFT E
USING SCHEDULEEMPLOYEES S
ON (S.EMPLOYEEID=E.EMPLOYEEID AND S.DAYDATE=TO_DATE('''||TO_CHAR(l_date)||''',''DD/MM/YYYY''))
WHEN MATCHED 
THEN UPDATE SET E."'||TO_CHAR(l_date)||'"=S.SHIFT';
    l_date:=l_date+1;
    EXIT
  WHEN l_date>TO_DATE('30/04/2017','DD/MM/YYYY');
  END LOOP;
END;

Du nævnte, at du ønsker at opdatere poster, men hvis du gerne vil indsætte manglende poster (for manglende EMPLOYEEID i EMPSHIFT-tabellen), se venligst merge_insert_clause



  1. Forbedring af top/top faldende medianløsning

  2. Hvorfor kan jeg ikke tvinge Oracle 11g til at forbruge flere CPU'er for en enkelt SQL-forespørgsel

  3. visning af flere poster ved hjælp af resultatsæt

  4. Konverter UPDATE til INSERT INTO ON DUPLICATE KEY UPDATE-sætning