1. Get rid of all advertisements and get unlimited access to documents by upgrading to Premium Membership. Upgrade to Premium Now and also get a Premium Badge!

UPDATE using SELECT Statement

Discussion in 'SQL PL/SQL' started by vijayrr21, Dec 17, 2013.

  1. vijayrr21

    vijayrr21 Guest

    Hi,

    I want to run an UPDATE query withing a SELECT query. Please find the query written as below. Kindly suggest would an UPDATE operation be possible within a SELECT statement.

    SELECT first_name, middle_name, last_name, process_id, user_id FROM USER_MST WHERE process_id = 'HOMELOAN' and user_id='52485' and user_id IN (select user_id from dual where 1 in (UPDATE USER_MST SET first_name='RAMAKRISHNAN',MIDDLE_NAME=NULL,LAST_NAME='R' WHERE PROCESS_ID = 'HOMELOAN' AND USER_ID = '52485'))

    :confused::confused::confused:
     
  2. krasnoslobodtsev_si

    krasnoslobodtsev_si Forum Genius

    Messages:
    626
    Likes Received:
    129
    Trophy Points:
    810
    Location:
    Russian Federation
    Hi.

    Links
    1 ) update statement,example and etc...
    http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10008.htm#SQLRF55481
    http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10008.htm#i2189756

    2) http://docs.oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3058
    Code (SQL):

    UPDATE ( SELECT OLD.a, OLD.b, OLD.c, ....                 NEW.x, NEW.y, NEW.z, ....            FROM ...        ) SET a = x, b = y, c = z, .........
     
    Code (SQL):


    CREATE TABLE t1(x INT, y INT);
    CREATE TABLE t2(a INT, b INT );

    INSERT INTO t1
    SELECT level ,dbms_random.VALUE(1,10)
    FROM dual
    CONNECT BY level <11;

    INSERT INTO t2
    SELECT level ,dbms_random.VALUE(11,20)
    FROM dual
    CONNECT BY level <11;

    commit;

    SELECT * FROM t1;

    UPDATE(SELECT * FROM t1,t2 WHERE t1.x = t2.a) SET y = b;
    ALTER TABLE t2 ADD CONSTRAINT t2_pk PRIMARY KEY(a);
    UPDATE(SELECT * FROM t1,t2 WHERE t1.x = t2.a) SET y = b;

    SELECT * FROM t1;


    SQL>
     
    TABLE created
     
    TABLE created
     
    10 ROWS inserted
     
    10 ROWS inserted
     
                                           
                                          X                                       Y
    --------------------------------------- ---------------------------------------
                                          1                                       3
                                          2                                      10
                                          3                                       5
                                          4                                       6
                                          5                                       3
                                          6                                       3
                                          7                                       4
                                          8                                       7
                                          9                                       7
                                         10                                       3
     
    10 ROWS selected
     
    Commit complete
     
    UPDATE(SELECT * FROM t1,t2 WHERE t1.x = t2.a) SET y = b
     
    ORA-01779: cannot MODIFY a COLUMN which maps TO a non key-preserved TABLE
     
    TABLE altered
     
    10 ROWS updated
       
                                          X                                       Y
    --------------------------------------- ---------------------------------------
                                          1                                      19
                                          2                                      15
                                          3                                      17
                                          4                                      16
                                          5                                      11
                                          6                                      14
                                          7                                      15
                                          8                                      19
                                          9                                      14
                                         10                                      17
     
     10 ROWS selected
     
    SQL>