Home » SQL & PL/SQL » SQL & PL/SQL » Update multiple columns in Case (Oracle 11g)
Update multiple columns in Case [message #640912] Thu, 06 August 2015 11:34 Go to next message
Xandot
Messages: 235
Registered: January 2014
Location: India
Senior Member
Hello All,

I have "Emp" table:

  CREATE TABLE "FORMS2APEX"."EMP" 
   (	"EMPNO" NUMBER(4,0), 
	"ENAME" VARCHAR2(10 BYTE), 
	"JOB" VARCHAR2(9 BYTE), 
	"MGR" NUMBER(4,0), 
	"HIREDATE" DATE, 
	"SAL" NUMBER(7,2), 
	"COMM" NUMBER(7,2), 
	"DEPTNO" NUMBER(2,0), 
	"SAL1" NUMBER
   )


Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7369,'SMITH','CLERK',7902,to_date('17-DEC-80','DD-MON-RR'),800,null,20,800);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7499,'ALLEN','SALESMAN',7698,to_date('20-FEB-81','DD-MON-RR'),1600,300,30,1600);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7521,'WARD','SALESMAN',7698,to_date('22-FEB-81','DD-MON-RR'),1250,500,30,1250);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7566,'JONES','MANAGER',7839,to_date('02-APR-81','DD-MON-RR'),2975,null,20,2975);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7654,'MARTIN','SALESMAN',7698,to_date('28-SEP-81','DD-MON-RR'),1250,1400,30,1250);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7698,'BLAKE','MANAGER',7839,to_date('01-MAY-81','DD-MON-RR'),2850,null,30,2850);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7788,'SCOTT','ANALYST',7566,to_date('19-APR-87','DD-MON-RR'),3000,null,20,3000);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7844,'TURNER','SALESMAN',7698,to_date('08-SEP-81','DD-MON-RR'),1500,0,30,1500);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7876,'ADAMS','CLERK',7788,to_date('23-MAY-87','DD-MON-RR'),1100,null,20,1100);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7900,'JAMES','CLERK',7698,to_date('03-DEC-81','DD-MON-RR'),950,null,30,950);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7902,'FORD','ANALYST',7566,to_date('03-DEC-81','DD-MON-RR'),3000,null,20,3000);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SAL1) values (7369,'ankit','CLERK',7902,to_date('17-DEC-80','DD-MON-RR'),1000,1,20,1000);



I want to update multiple columns like :

update emp set
             case 
              when ename='SCOTT' then sal=500
              when ename='SALESMAN' then sal1=600 end;


But I'm getting error in update query, Please correct me.


Thanks,
Xandot
Re: Update multiple columns in Case [message #640913 is a reply to message #640912] Thu, 06 August 2015 11:36 Go to previous messageGo to next message
BlackSwan
Messages: 26766
Registered: January 2009
Location: SoCal
Senior Member
when all else fails Read The Fine Manual

https://docs.oracle.com/database/121/SQLRF/statements_10008.htm#i2067715
Re: Update multiple columns in Case [message #640914 is a reply to message #640912] Thu, 06 August 2015 11:39 Go to previous message
cookiemonster
Messages: 13920
Registered: September 2008
Location: Rainy Manchester
Senior Member
fundamentally case is a function that returns a single value.
You can't use it as a way of doing dynamic sql.
So you need a case per column you want to set and the case statement will return the value the column should be set to:
update emp 
set sal = case when ename = 'SCOTT' then 500 else sal end,
......
Previous Topic: Convert rows into columns
Next Topic: help with pattern match REGEXP etc
Goto Forum:
  


Current Time: Fri Apr 26 02:01:54 CDT 2024