Update do sql - nÃo funcionou

2 respostas
jsnpereira

Olá, Pessoal!

eu já tentei várias vezes não encontramos para resolver a problemas que estou fazendo no exercício
o exercício diz:
Atualize o salário do empregado com segundo maior salário de cada departamento para
10% a menos do maior salário do departamento

eu tentei programar para consultar da SQL veja ai.

SQL

update emp set sal= 1.10 * (select max(ex.sal) from emp ex, dept dx where ex.dptno = dx.deptno and ex.sal not in(select max(em.sal) from emp em, dept dp where em.dptno = dp.deptno group by dp.dname) group by dx.dname) where empno in ( select emx.empno from emp emx where sal in(select max(ex.sal) from emp ex, dept dx where ex.dptno = dx.deptno and sal not in(select max(em.sal) from emp em, dept dp where em.dptno = dp.deptno group by dp.dname) group by dx.dname));

mas o mensagem de erro apareceu "ORA-01427: a subconsulta de uma única linha retorna mais de uma linha"
eu já testei subquery no where funcionaram, mas na coluna sal não funciona para armazenar.

Aguardo ao retorno… obrigado

2 Respostas

Carlos_Figueiredo

Essa query (select) deve está retornando mais de 1 linha

Acho q esse select nao traz o q vc quer… mas de qq forma… vc nao pode fazer um update com valores vindos de select… sem ter certeza q o select está correto…

Senão vc vai ter sérios problemas pra validar se os dados estao corretos… pq vc nao vai saber quais valores deveriam aparecer…

Carlos_Figueiredo

Tenta essa query aki…

update emp 
	set emp.sal=  0.9 * tst.max_sal
from ( 	select max(sal) as max_sal, dptno
		from emp
		group by dptno 
	 ) tst
	,( select max(ex.sal) 2nd_sal, ex.dptno                                         
	   from emp ex  
   	   where not exist (select max(em.sal), 
	  			   from emp em  
				   where em.dptno = dp.deptno  
				   group by dp.dname)  
	   group by ex.dptno 
	) controle 
where controle.dptno = tst.dptno
	and tst.dptno = emp.dptno
	and emp.sal = controle.2nd_sal
	and emp.dptno = controle.dptno
Criado 15 de maio de 2011
Ultima resposta 15 de mai. de 2011
Respostas 2
Participantes 2