Mostrando postagens com marcador banco de dados. Mostrar todas as postagens
Mostrando postagens com marcador banco de dados. Mostrar todas as postagens

terça-feira, 15 de março de 2016

Split MySQL

Opa :D

Eu tinha uma coluna chamada coluna_ids que continha o valor "172:536"... e eu precisava quebrar esse valor em antes e depois do sinal de dois pontos.

Para pegar o valor antes dos dois pontos eu usei:
select id from tabela where value_id = SUBSTRING_INDEX(SUBSTRING_INDEX(coluna_ids, ':', -1), ':', 1) ))

Para pegar o valor depois dos dois pontos eu usei:
select id from tabela where value_id = SUBSTRING_INDEX(SUBSTRING_INDEX(coluna_ids, ':', 1), ':', 1) ))

Fonte: https://gustavostraube.wordpress.com/2012/12/14/split-string-no-mysql/

Abraço!
Adriano Schmidt

quarta-feira, 4 de novembro de 2015

Instalar postgresql no ubuntu

Para instalar o postgresql no ubuntu vamos instalar também o pgadmin (cliente e gerenciador do postgres).

O pgadmin vamos instalar via interface gráfica:
- Procure por ubuntu software center na pesquisa do ubuntu
- Procure por pgadmin e o instale

Agora vá em um terminal e digite o comando abaixo para instalar o postgres
sudo apt-get install postgresql

Depois digite o comando abaixo para acessar o postgres que foi instalado utilizando o usuario default
sudo -u postgres psql

Depois altere a senha do usuário default:
ALTER USER postgres PASSWORD 'postgres';

Aperte Ctrl+D para sair do terminal psql

Agora volte no pgadmin, adicione uma nova conexão com localhost 5432 user postgres senha postgres

Pronto :D

Abraço!
Adriano Schmidt

quinta-feira, 15 de outubro de 2015

count com distinct

Opa..

Se eu faço uma query com distinct:

SELECT distinct o FROM tabela1 o JOIN tabela2

Quando eu faço count dela não vai bater:

SELECT distinct count (o) FROM tabela1 o JOIN tabela2

Pra resolver posso fazer assim:

SELECT count (distinct o) FROM tabela1 o JOIN tabela2

Obrigado ao meu chará Adriano de Souza pela dica!

Abraço!
Adriano Schmidt

quinta-feira, 30 de julho de 2015

Como instalar o Mongo no linux?

Segue passo-a-passo para instalar o MongoDB no Linux

Onde estiver escrito (root) você deve utilizar um usuário com permissão de root

Apenas para informacao: O mongo rodara em localhost:27017 e tambem sera startado automaticamente na proxima inicializacao da maquina.


########### Para RedHat/CentOS ###########

# crie o diretorio /data/db (root)
mkdir -p /data/db

# Garanta que o dono da pasta seja o usuario correto. (Altere <nome do usuario> para o usuario que iniciara o mongo) (root)
chown -R <nome do usuario> /data/db/

# crie o arquivo do repositorio yum (root)
vi /etc/yum.repos.d/mongodb-org-3.0.repo

# aperte i para entrar no modo "INSERT" e depois cole as seguintes linhas:
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1

# aperte "ESC" e depois digite ":wq" para salvar e fechar o arquivo

# agora instale o mongo (root)
yum install -y mongodb-org

# rode o comando abaixo e verifique se a instalação aconteceu com sucesso
mongo --version

# inicie o mongo
service mongod start

# teste
mongo

#apert ctrl c para sair


########### Para Ubuntu/Debian ###########


# crie o diretorio /data/db (root)
mkdir -p /data/db

# Garanta que o dono da pasta seja o usuario correto. (Altere <nome do usuario> para o usuario que iniciara o mongo) (root)
chown -R <nome do usuario> /data/db/

# agora instale o mongo (root)
apt-get install mongodb

# rode o comando abaixo e verifique se a instalação aconteceu com sucesso
mongo --version

# teste
mongo

#apert ctrl c para sair


Fonte: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/
Créditos: Ao Alfredo Zipperer que me deu uma mão para instalar o mongo aqui

Vaaleu!
Adriano Schmidt

quarta-feira, 15 de abril de 2015

Usuário somente leitura no PostgreSQL

Olá pessoal,

Hoje tive que criar um usuário somente leitura (read-only) no PostgreSQL, ao fazer login com o usuário que tem poder de tudo executei os seguintes comandos:

CREATE USER nomedousuario PASSWORD 'teste';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO nomedousuario;
revoke create on schema public from public;

Você pode rodar a segunda linha (GRANT SELECT) dando outros privilégios como UPDATE, INSERT, DELETE entre outros.
A terceira linha (revoke create) é necessária para tirar a perimissão de criar novas tabelas, mas tira a permissão de todo mundo, provavelmente tem como fazer algo mais específico.

Abraço!!
Adriano Schmidt

sábado, 27 de dezembro de 2014

PSQLException: ERROR: syntax error at or near "User"

Pessoal..

Hoje tive o erro: PSQLException: ERROR: syntax error at or near "User"

Isso acontece pois a entidade que eu criei se chama User e no PostgreSQL deve existir uma tabela com esse nome ou user é uma palavra reservada.

Então mudei minha entidade para ter outro nome de tabela e não o default:

@Entity
@Table(name="LOGIN_USER")
public class User {

Então funcionou perfeitamente.

Abraço!
Adriano Schmidt

quinta-feira, 14 de agosto de 2014

NLS_SORT Oracle

Versão em Português

Today I had problems to order uppercase and lowercase letters in the Oracle database.

Running the following command solved the problem:
ALTER SESSION SET NLS_SORT = WEST_EUROPEAN;

This problem occurred in the client environment but not locally because the NLS_SORT parameter was setted to "BINARY" (responsible for sorting [AZ to az]), and what we needed it to be the "WEST_EUROPEAN" [Aa to Zz] standard.

The trigger below changes the value of the NLS_SORT parameter whenever a session starts in the schema. Do not forget to change the schema name.

create or replace trigger PARAM_SESSION_TRIG
after logon
on NomeDoSchema.schema
begin
execute immediate 'ALTER SESSION SET NLS_SORT=WEST_EUROPEAN';
end;

Kind regards!
Adrian Schmidt

NLS_SORT Oracle

English version

Hoje tive problemas com ordenação entre letras maiúsculas e minúsculas no banco de dados Oracle.

Executando o comando abaixo resolveu:
ALTER SESSION SET NLS_SORT=WEST_EUROPEAN;

Este problema aconteceu no ambiente do cliente mas não localmente, pois o parâmetro nls_sort estava setado como "BINARY" (responsável pela ordenação [AZ a az]), e precisávamos que fosse o padrão "WEST_EUROPEAN" [Aa a Zz] .

A trigger abaixo altera o valor do parâmetro nls_sort sempre que inicia-se uma sessão no schema. Não esqueça de alterar o nome do schema.

create or replace trigger PARAM_SESSION_TRIG
after logon
on NomeDoSchema.schema
begin
execute immediate 'ALTER SESSION SET NLS_SORT=WEST_EUROPEAN';
end;

Abraços!
Adriano Schmidt

domingo, 20 de julho de 2014

Atualizar nextval oracle

Pessoal, tenho uma tabela que um monte de gente inseriu dados na mão e não respeitou a sequence.

Então utilizei este script para atualizar o nextval da sequence com o max()+1 da coluna id.


declare
  v_prox_numero number;
  v_numero_atual number;
  v_novo_numero number;
  v_numero number;
 
  v_texto varchar2(100);
begin
 
  select max(t.id)+1
    into v_prox_numero
    from nome_tabela t;
   
  select nome_sequence.nextval
    into v_numero_atual
    from dual;
   
  v_novo_numero := (v_prox_numero - v_numero_atual)+1;
 
  if v_novo_numero > 0 then
    for reg_seq in 1..v_novo_numero loop
       
      select nome_sequence.nextval
      into v_numero
      from dual;
   
    end loop;
  end if;
end;


Créditos à Ana Karina Pereira.

Abraços!
Adriano Schmidt

quinta-feira, 10 de julho de 2014

Join HQL

Quando no Java temos uma Entidade que tem uma lista de outra entidade.
E vamos fazer uma consulta com HQL (Hibernate Query Language) e precisamos acessar um atributo de um item da lista precisamos fazer um JOIN.

Segue um exemplo bem básico de como podemos fazer:

select a from TabelaA a inner join a.bList b inner join b.c.dList d where d.id = :id"

select a from TabelaA a, in (a.bList) b, in (b.c.dList) d where d.id = :id

Abraço!
Adriano Schmidt

domingo, 15 de junho de 2014

Deletar todas as tabelas de um banco de dados Oracle

Script que deleta todas as tabelas do banco:

begin
 for deleta in (select table_name, 'DROP TABLE '||table_name||' cascade constraints' AS dropar from user_tables) loop
 BEGIN
  EXECUTE IMMEDIATE deleta.dropar;
  dbms_output.put_line('DROP TABLE '||deleta.table_name||' cascade constraints;');
  EXCEPTION WHEN OTHERS THEN
  dbms_output.put_line('Erro ao tentar dropar a tabela:'||deleta.table_name);
 END;
 end loop;
end;

Simples e rápido!

Para deletar todas as sequences do banco é só rodar o seguinte comando:

begin
 for deleta in (select sequence_name, 'DROP SEQUENCE '||sequence_name||' ' AS dropar from user_sequences) loop
 BEGIN
  EXECUTE IMMEDIATE deleta.dropar;
  dbms_output.put_line('DROP SEQUENCE '||deleta.sequence_name||' ;');
  EXCEPTION WHEN OTHERS THEN
  dbms_output.put_line('Erro ao tentar dropar a tabela:'||deleta.sequence_name);
 END;
 end loop;
end;

Fonte: http://golker.blogspot.com.br/2009/05/dropar-todos-os-tipos-e-tabelas-no.html

Abraço!
Adriano Schmidt

quarta-feira, 16 de abril de 2014

show_sql=true não exibe os parâmetros

Após setar o show-sql como true no meu persistence.xml no meu projeto que roda no JBoss EAP 6.2 (ou Jboss AS7, ou WildFly) as queries apareceram no log, mas o valor dos parâmetros não. Aparecia somente assim:

21:10:03,314 INFO  [stdout] (http-/0.0.0.0:8080-3) Hibernate: select exemplo0_.COL_X from EXEMPLO exemplo0_ where exemplo0_.COL_Y =?

Para fazer os valores aparecerem entrei no arquivo standalone.xml do meu JBoss e fui no subsystem logging (esse arquivo tem várias tags subsystem, uma delas tem o name logging)

Então, junto com os outros loggers adicionei o logger abaixo:

<logger category="org.hibernate.type.descriptor.sql.BasicBinder">
     <level name="TRACE"/>
</logger>

Após reiniciar o JBoss, o log ficou assim:

21:15:04,234 INFO  [stdout] (http-/0.0.0.0:8080-3) Hibernate: select exemplo0_.COL_X from EXEMPLO exemplo0_ where exemplo0_.COL_Y =?
21:15:04,234 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] (http-/0.0.0.0:8080-3) binding parameter [1] as [BIGINT] - 600

Fonte: http://stackoverflow.com/questions/9159752/how-to-get-jdbc-binding-parameters-from-hibernate-in-jboss-7

domingo, 9 de fevereiro de 2014

Criar Schema Oracle

Pessoal..

Hoje tive que fazer uma atividade simples, criar um schema no oracle, porém era necessário saber a sintaxe, saber um pouco sobre tablespaces e também dar os grants corretos.

Assim sendo, resolvi documentar aqui para caso alguém tenha que fazer algo semelhante:

Segue abaixo uma sugestão de script para criar os databases. Não esqueça de alterar nome_schemad, nome_schema, caminho_sevidor_datafiles:

CREATE TABLESPACE nome_schemad  
DATAFILE ‘caminho_servidor_datafiles\nome_schemad.DBF' SIZE 100M AUTOEXTEND ON
/

CREATE USER nome_schema IDENTIFIED BY nome_schema
DEFAULT TABLESPACE nome_schemad TEMPORARY TABLESPACE TEMP
/
grant connect, resource, create any view, create any synonym, create any table, create database link to nome_schema
/


Ou mais simples ainda usando a TABLESPACE users:

CREATE USER nome_schema IDENTIFIED BY nome_schema
DEFAULT TABLESPACE users TEMPORARY TABLESPACE TEMP
/
grant connect, resource, create any view, create any synonym, create any table, create database link to nome_schema
/

A senha é o que vem depois do IDENTIFIED BY, caso queira pode mudar.

É isso aí, abraços!!
Adriano Schmidt

terça-feira, 19 de junho de 2012

IDENTITY_INSERT OFF

Hoje um amigo aqui da empresa me perguntou:

"Adriano, usei a query abaixo em um banco SQLSERVER e deu esse erro ali, sabe o que pode ser?"
insert into my_table (id, description, situation_type) values (14, 'aaaa', 1);
Error: Não é possível inserir um valor explícito para a coluna de identidade na tabela 'my_table' quando IDENTITY_INSERT está definido como OFF.


Para resolver bastou tirar o id da query e deixar esse trabalho para o próprio banco de dados:

insert into my_table (description, situation_type) values ('aaaa', 1);

Pronto, resolvido!

Abraços!
Adriano Schmidt

quarta-feira, 29 de junho de 2011

No Dialect mapping for JDBC type: 2004

Olá..

Um cliente aqui usa o banco de dados Informix.. ao testar nosso projeto nesse banco tive o seguinte erro:

13:57:15,040 INFO [DatabaseMetadata] table not found: MY_TABLE
13:57:15,041 ERROR [SchemaUpdate] could not complete schema update: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2004
at org.hibernate.dialect.TypeNames.get(TypeNames.java:79) [:3.5.5-Final]
at org.hibernate.dialect.TypeNames.get(TypeNames.java:104) [:3.5.5-Final]
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:347) [:3.5.5-Final]

O problema era que temos uma tabela que guarda uma imagem em uma de suas colunas e usamos @Lob no seu mapeamento. O Dialeto do Informix não aceitou o @Lob.

Para resolver extendi o Dialeto do Informix e adicionei as seguinte linhas no construtor:

registerColumnType(Types.BLOB, "blob");
registerColumnType(Types.CLOB, "clob");

Mais detalhes em http://www.snailshell.de/blog/archives/2007/06/entry_108.html

Alterei o persistence.xml para usar o dialeto que criei e o projeto funcionou perfeitamente.

Outras fontes:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2646
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2523

Vaaleu
Adriano Schmidt

sexta-feira, 11 de março de 2011

ORA-01452: cannot CREATE UNIQUE INDEX

Olá,

Fui criar um índice único no oracle:

CREATE UNIQUE INDEX nome_do_indice ON nome_da_tabela (coluna1, coluna2, coluna3);

e aconteceu o seguinte erro:

Error: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found

Isso aconteceu pois na tabela que fui inserir o índice já haviam registros que violavam esse índice, por isso não permitiu criar..

Para resolver removi os registros que violavam o índice e deu tudo certo.

Mais detalhes sobre o erro: http://ora-01452.ora-code.com/
Mais detalhes sobre índices no oracle: http://www.techonthenet.com/oracle/indexes.php

Vaaleu!
Adriano Schmidt.

quinta-feira, 3 de março de 2011

join type not supported by OracleJoinFragment

Hoje ao usar um right join num banco oracle tive o seguinte erro:

join type not supported by OracleJoinFragment (use Oracle9iDialect/Oracle10gDialect)

Para resolver tive que trocar o hibernate.dialect do persistence.xml de:
org.hibernate.dialect.OracleDialect
para:
org.hibernate.dialect.Oracle10gDialect

Pronto, resolvido.
Adriano Schmidt

terça-feira, 8 de fevereiro de 2011

SQL Server - Apparently wrong driver class specified for URL

Olá, hoje tive o seguinte erro ao iniciar o JBoss num ambiente SQL Server 2000:

15:45:18,348 WARN [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: com.microsoft.sqlserver.jdbc.SQLServerDriver, url: jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydatabase)

O problema era a URL de conexão com o banco no meu arquivo ds.xml, tirei o :microsoft

jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydatabase
jdbc:sqlserver://localhost:1433;DatabaseName=mydatabase

Vaaleu!
Adriano Schmidt

terça-feira, 25 de janeiro de 2011

SQL - ignorar horas

Oi,

Fiz a segunte query:

select m from MinhaTabela m where :date between m.initialDate AND m.endDate

e tive o seguinte problema: o meu parâmetro :date era uma data com as horas 00:00, porém o initialDate era sempre com horário (12:30 por exemplo), então minha query nunca retornava nada.

Para igorar as horas utilizei a função date()

select m from MinhaTabela m where :date between date(m.initialDate) AND date(m.endDate)

Pronto! Dessa forma o horário foi ignorado e a comparação foi feita utilizando somente as datas e tudo funcionou : )

Mais funções de data e hora podem ser encontradas em: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

Vaaleu!
Adriano Schmidt

quarta-feira, 22 de dezembro de 2010

Exportar dados mysql

Olá,

No terminal de comando basta executar a seguinte linha de comando:

mysqldump -u root -p -r c:\dados.sql nomeDoBanco

altere nomeDoBanco pelo nome do banco
altere root pelo nome do usuário
altere c:\dados.sql pelo diretório/arquivo.sql onde os dados serão gravados

Depois será solicitada a senha e então os dados serão exportados para o arquivo indicado.

Vaaleu!