简体   繁体   中英

How can I write this query from MySQL (SQL) to Oracle (SQL)

I have this SQL statement, but I do not know how to write it in Oracle (The Multiple Tables Update is not supported by Oracle):

UPDATE sscanner.sis_emp_card ec, sscanner.sis_cards c, sscanner.sis_employees e 
SET e.firstname='x', e.lastname='y', e.car_number=NULL, c.card_number='12345', e.email='x.y@xyz.com', ec.active='1' 
WHERE ec.id_card = c.id_card AND ec.id_emp=e.id_employee AND id=1;

sis_cards: id_card (PK) ..

sis_employees: id_employee (PK) ..

sis_emp_card: id(PK), id_card (FK) referencing sis_cards, id_employee(FK) referencing sis_employees

Try to update one by one, like the bellow code

begin
   for R in (select e.rowid ERecId, c.rowid CRecId, ec.rowid ECRecId
               from sscanner.sis_emp_card ec, sscanner.sis_cards c,
                    sscanner.sis_employees e
              where ec.id_card = c.id_card
                and ec.id_emp = e.id_employee
                and id = 1) loop

      update sscanner.sis_employees
         set firstname = 'x',
             lastname = 'y',
             car_number = null,
             email = 'x.y@xyz.com'
       where rowid = R.ERecid;

      update sscanner.sis_cards
         set card_number = '12345'
       where rowid = R.CRecId;

      update sscanner.sis_emp_card ec
         set ec.active = '1'
       where rowid = R.ECRecId;

   end loop;
end;

I know the question is already answered, but some Oracle syntax for updates. The last is an update join view.

UPDATE sscanner.sis_employees e
       SET e.firstname='x', 
           e.lastname='y', 
           e.car_number=NULL,
           e.email = 'x.y@xyz.com'
    WHERE EXISTS (
       SELECT *
       FROM sscanner.sis_emp_card ec, sscanner.sis_cards c
       WHERE ec.id_card = c.id_card AND ec.id_employee=e.id_employee AND ec.id=1);

    UPDATE sscanner.sis_cards c
        SET c.card_number = '12345'
    WHERE EXISTS(
        SELECT *
        FROM sscanner.sis_emp_card ec,  sscanner.sis_employees e
        WHERE c.id_card = ec.id_card AND ec.id_employee=e.id_employee AND ec.id=1);

    UPDATE (
        SELECT e.firstname, e.lastname, e.car_number, e.email,
        c.card_number, ec.active
        FROM sscanner.sis_emp_card ec, sscanner.sis_cards c,  sscanner.sis_employees e
        WHERE ec.id_card = c.id_card AND ec.id_employee=e.id_employee AND ec.id=1
        ) ec SET 
        ec.active='1';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM