Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

zamami

[Resolvido] Iniciando no Oracle

Recommended Posts

Boa tarde a todos.

 

Estou começando a trabalhar com Oracle, nunca trabalhei com nenhum tipo de banco de dados e estou usando o Oracle SQL Developer. Estou com uma dúvida e peço a ajuda de vocês...

Tenho duas tabelas, MODELING_REQUEST e MODELING_AGENT, tenho que alterar as colunas AGENT_ID e AGENT_TYPE_ID da tabela MODELING_AGENT atraves da coluna MODELING_REUQEST_ID da tabela MODELING_REQUEST.

 

A seguir esta o codigo iniciado.

 

UPDATE modeling_agent

SET agent_id = '01' , agent_type_id = '99'

WHERE modeling_request_id = SELECT modeling_request_id FROM modeling_request

 

Se vocês puderem também me explicar as alterações feitas eu agradeço.

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este comando funciona apenas se

 

SELECT modeling_request_id FROM modeling_request

 

retornar apenas uma linha. Se retornar mais de uma linha vai dar erro. Pra resolver utilize o operador "IN" (conforme abaixo) que utiliza uma lista de valores.

 

UPDATE modeling_agent

SET agent_id = '01' , agent_type_id = '99'

WHERE modeling_request_id in (SELECT modeling_request_id FROM modeling_request)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim eu não sabia do comando IN

Agora sim esta funcionando

 

Valeu mesmo Carbonera !!!

Mas se eu quiser manter somente uma linha o código que eu havia feito iria rodar normalmente ?! Pq ele não estava rodando.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE modeling_agent
SET agent_id = '01' , agent_type_id = '99'
WHERE modeling_request_id = (SELECT modeling_request_id FROM modeling_request)

 

Mas a query

 

SELECT modeling_request_id FROM modeling_request

 

só poderia retornar 1 somente 1 registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE modeling_agent
SET agent_id = '01' , agent_type_id = '99'
WHERE modeling_request_id = (SELECT modeling_request_id FROM modeling_request)

 

Mas a query

 

SELECT modeling_request_id FROM modeling_request

 

só poderia retornar 1 somente 1 registro.

 

Mas quando eu vou compilar essa query acusa o erro ORA-01427 que diz que a subquery retorna mais de uma linha...

Teria uma outra maneira de se fazer isso ?! Eu estou fazendo alguma coisa errada ?!

 

Vlw Motta !

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE modeling_agent
SET agent_id = '01' , agent_type_id = '99'
WHERE modeling_request_id = (SELECT modeling_request_id FROM modeling_request)

 

Mas a query

 

SELECT modeling_request_id FROM modeling_request

 

só poderia retornar 1 somente 1 registro.

 

Mas quando eu vou compilar essa query acusa o erro ORA-01427 que diz que a subquery retorna mais de uma linha...

Teria uma outra maneira de se fazer isso ?! Eu estou fazendo alguma coisa errada ?!

 

Vlw Motta !

Abraços

 

Primeiro você tem q descobrir o q você quer. Se o erro é q deveria tá retornando uma linha e tá retornando várias, você resolve com um Where com a chave primária da tabela. Assim sempre vai renornar só um.

 

UPDATE modeling_agent

SET agent_id = '01' , agent_type_id = '99'

WHERE modeling_request_id = (SELECT modeling_request_id

FROM modeling_request

WHERE CODIGO = 1)

 

Agora se realmente a sub query deve retornar vários registros e você deve atualizar todos que satisfazerem a condição, então use "in"

 

 

UPDATE modeling_agent

SET agent_id = '01' , agent_type_id = '99'

WHERE modeling_request_id IN (SELECT modeling_request_id

FROM modeling_request)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este comando funciona apenas se

 

SELECT modeling_request_id FROM modeling_request

 

retornar apenas uma linha. Se retornar mais de uma linha vai dar erro. Pra resolver utilize o operador "IN" (conforme abaixo) que utiliza uma lista de valores.

 

UPDATE modeling_agent

SET agent_id = '01' , agent_type_id = '99'

WHERE modeling_request_id in (SELECT modeling_request_id FROM modeling_request)

 

Creio que resolveu, não ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este comando funciona apenas se

 

SELECT modeling_request_id FROM modeling_request

 

retornar apenas uma linha. Se retornar mais de uma linha vai dar erro. Pra resolver utilize o operador "IN" (conforme abaixo) que utiliza uma lista de valores.

 

UPDATE modeling_agent

SET agent_id = '01' , agent_type_id = '99'

WHERE modeling_request_id in (SELECT modeling_request_id FROM modeling_request)

 

Creio que resolveu, não ?

 

Esse comando que o Carbonera fez realmente funciona, mas me pediram pra fazer sem o IN, era pra mudar somente uma linha, o que eu não havia feito era o Where com a chave primária, como o Carbonera fez no post anterior.

Muito obrigado pelas explicações.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.