Category Archives: Banco de Dados

SQL – UPDATE a partir de um SELECT

E ai galera, beleza?

Hoje vamos aprender como efetuar UPDATE em registros obtidos a partir de um SELECT, temos duas formas e fazê-lo, para exemplificar vamos considerar o seguinte SELECT:

SELECT A.*
FROM TAB_A A JOIN TAB_B B ON (A.ID = B.ID)
WHERE <CONDIÇÕES...>

Opção 1 – Utilizar o SELECT desejado no lugar da tabela a ser alterada, no SET utilize as colunas da TAB_A que serão atualizadas:

UPDATE (
SELECT A.*
FROM TAB_A A JOIN TAB_B B ON (A.ID = B.ID)
WHERE <CONDIÇÕES...>
) SET <COL1 TAB_A> = <VAL1>, <COL2 TAB_A> = <VAL2>

A abordagem acima em algumas modelagem podem acarretar no erro ORA-01779: cannot modify a column which maps to a non key-preserved table, quando isso acontecer utilize a opção 2, abaixo.

Opção 2 – Utilizar a clausula EXISTS no WHERE do UPDATE tradicional:

UPDATE TAB_A TA
SET <COL1 TAB_A> = <VAL1>, <COL2 TAB_A> = <VAL2>
WHERE EXISTS (
SELECT A.*
FROM TAB_A A JOIN TAB_B B ON (A.ID = B.ID)
WHERE <CONDIÇÕES...>
AND A.ID = TA.ID
)

Espero que tenha ajudado! Qualquer dúvida, poste aqui nos comentários que eu responderei o mais breve possível 😉

See ya!

Anúncios

MongoDB – Erro: Can’t extract geo keys

E ai galera, estou me aventurando no mundo NoSQL com o sr. MongoDB

E ao criar meu primeiro índice para fazer pesquisas por proximidade, tomei meu primeiro erro, e tive que ir atrás para resolve-lo 😦

Oque aconteceu, peguei latitudes e longitudades pelo google maps, lá pros lados da austrália…
type: "Point", coordinates: [ -33.91991, 151.257018 ]
adicionei ao meu documento e tentei gerar o índice e tomei o erro abaixo:

db.xxx.createIndex({ xxx : "2dsphere"})

“ok” : 0,
“errmsg” : “Can’t extract geo keys… longitude/latitude is out of bounds, lng: … lat: …”,
“code” : 16755,
“codeName” : “Location16755”

Dando uma pesquisada, descobri é que o google maps disponibiliza os valores na ordem diferente (latitude/longitude) da qual o MongoDB espera (longitude/latitude)… para resolver o problema apenas precisei inverter os valores inseridos e o índice foi criado sem problemas 😀

Os valores da Longitude deve estar entre -180° e +180° e a Latitude entre -90° e 90°!!! (Y)

Espero que tenha ajudado!

Fonte: go-oleg / Paul T. Rawkeen – Stackoverflow.com

JPQL – Como criar query de DELETE com JOIN

E ai galera beleza?
Estou em um novo projeto muito legal, e me deparei com um problema, eu precisava fazer uma query para deletar uns dados no banco, só que pra selecionar exatamente oque eu precisava excluir era necessário utilizar joins, porém ao montar uma query parecida com essa:

delete from Queue q
where q.enabledMember = :enabledMember
and q.letter.eventReason.event.type = :eventType
and q.letter.eventReason.reason = :reason

Tomei o seguinte erro:

The entity abstract schema type declaration is malformed

Pesquisei um pouco na net e achei a seguinte solução, deletar a partir de um subselect, a query ficou assim:

delete from Queue q
where q in (select sq from Queue sq
where sq.enabledMember = :enabledMember
and sq.letter.eventReason.event.type = :eventType
and sq.letter.eventReason.reason = :reason )

Bom, é isso ai galera, espero que tenha ajudado 😀

Abraços!

Fonte: Jake Trent – JakeTrent.com

SQL – Como inserir Date / Timestamp

E ai galera beleza?

Hoje segue um exemplo de como inserir Date / Timestamp no banco de dados…
possibilitando vc adicionar uma data, hora, minuto, segundo ou todos eles em uma
tabela do banco de dados (testado no Oracle XE) !!!

Para isso utilizamos o método/função:

TO_TIMESTAMP()

Segue abaixo alguns exemplos de utilização!!!

Utilizando uma variável:

INSERT INTO sua_tabela(sua_coluna) VALUES (TO_TIMESTAMP(:variavel_string,'YYYY-MM-DD HH24:MI:SS'));

Utilizando uma string de Hora/Minuto:

INSERT INTO sua_tabela(sua_coluna) VALUES (TO_TIMESTAMP('23:59','HH24:MI'));

Utilizando uma string de Data:

INSERT INTO sua_tabela(sua_coluna) VALUES (TO_TIMESTAMP('2014-06-13','YYYY-MM-DD'));

Utilizando a Data atual:

INSERT INTO sua_tabela(sua_coluna) VALUES (CURRENT_TIMESTAMP);

Fonte: Stackoverflow – reggie