zamami 0 Denunciar post Postado Maio 12, 2011 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
Carbonera 0 Denunciar post Postado Maio 12, 2011 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
zamami 0 Denunciar post Postado Maio 12, 2011 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
Motta 645 Denunciar post Postado Maio 12, 2011 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
zamami 0 Denunciar post Postado Maio 12, 2011 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
Carbonera 0 Denunciar post Postado Maio 12, 2011 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
Motta 645 Denunciar post Postado Maio 12, 2011 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
zamami 0 Denunciar post Postado Maio 13, 2011 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