Mostrar mensagens com a etiqueta SQL. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta SQL. Mostrar todas as mensagens

terça-feira, 12 de fevereiro de 2013

Microsoft Visio - Exportar o diagrama de modelo de base de dados para SQL

No Microsoft Visio 2010 é possível criar um diagrama de modelo de base de dados. A partir deste diagrama pretende-se criar todo o DDL ou mesmo criar directamente a base de dados.
A partir do Visio, conforme disponibilizado pela Microsoft,  isto não é possível.

Uma solução é ter o Visio for Enterprise Architects e a partir de lá é possível  gerar o esquema de base de dados.

Outra solução, para quem não tem o Visio for Enterprise Architects, é instalar um add-on para o Visio que permite, a partir do diagrama de modelo de base de dados, gerar o DDL. Com o DDL é então possível criar o esquema de base de dados, praticamente em qualquer produto de base de dados relacional.

O add-on encontra-se aqui. É necessário instalar a versão mais recente da framework .Net para se poder usar o add-on. Instalar o add-on com o Visio fechado.

Após instalar o add-on e abrir novamente o Visio aparece uma nova tab.


Ao carregar em  Forward Engineer aparece a seguinte caixa de diálogo.



Ao carregar em Ok um script é gerado e guardado no local indicado em Output file name.

Convém notar que o script está preparado para SQL Server, mas alterações para outros produtos de base de dados relacionais e relativamente simples.

quinta-feira, 22 de novembro de 2012

Obter conteúdo de um CLOB (de texto) em Oracle SQL

Maneira simples de se ver o que está num CLOB (desde que seja um CLOB de texto).

SELECT DBMS_LOB.substr(coluna_clob, 3000)
FROM tabela_com_clob 

terça-feira, 31 de maio de 2011

Ver código fonte Java da Base de Dados

O SQL seguinte permite ver o código fonte Java armazenado numa BD Oracle (em Java Sources). Tomar em atenção aos valores de v e i caso seja preciso aumentar os valores caso a fonte seja maior do que o especificado.


DECLARE
       b CLOB;
       v VARCHAR2 (9000);
       i INTEGER;
    BEGIN
      DBMS_LOB.createtemporary (b, FALSE);
      dbms_java.export_source ('JSendEmail', 'MDC', b);
      i := 9000;
      DBMS_LOB.read (b, i, 1, v);
      DBMS_OUTPUT.put_line (v);
   END;

sexta-feira, 21 de janeiro de 2011

Importar dados no Oracle SQL

Para importar dados para dentro de uma base de dados Oracle, pode-se usar o Import Data Pump.

Para começar é necessário criar uma directoria dentro da base de dados:

CREATE OR REPLACE DIRECTORY impdp_dir AS '/home/oracle';

E dar permissões de acesso ao utilizador que irá realizar o import:

GRANT READ, WRITE ON DIRECTORY impdp_dir TO utilizador;

Não convém nada importar os dados com um utilizador dba, pois caso não se saiba exactamente o que está dentro do dados tal importação poderá dar, eventualmente, mais permissões do que se deseja.

Seguidamente importar da linha de comandos do sistema operativo os dados. No exemplo seguinte está-se a usar Linux:

impdp utilizador/password DIRECTORY=impdp_dir DUMPFILE=dados_importar.dmp FULL=y LOGFILE=resultado.log

E pronto. Dados importados.

quinta-feira, 16 de dezembro de 2010

ORA-01591: lock held by in-doubt distributed transaction TEXTO

A resolução deste problema é simples, desde que tenham o sistema que usa as tabelas em baixo.

Este problema aconteceu-me ao tentar apagar uns registos de uma dada tabela. Para alguns registos o Oracle estava sempre a dar este erro: ORA-01591: lock held by in-doubt distributed transaction TEXTO. Sabendo que o sistema que usava as tabelas estava em baixo, era impossível no momento da remoção dos registos haver algo a efectuar uma transacção.

O TEXTO no erro ORA-01591, indica qual é a identificação do lock.

Para resolver o problema basta executar:

rollback force 'TEXTO';

Tomar em atenção que se está a forçar a terminação de uma transacção. Apenas efectuar isto se tiverem a certeza de que ocorreram problemas algures no tempo, e que a transacção ficou pendurada. No caso acima descrito era impossível haver transacção a acontecer, pois o sistema estava em baixo.

Dependendo da carga e do rollback necessário, poderá acontecer que o Oracle demore algum tempo até terminar o rollback.

Obtenção de todos os privilégios em Tabelas para um dado Utilizador em Oracle

Como system, por exemplo, correr a seguinte query:

SELECT *
FROM DBA_TAB_PRIVS
WHERE grantee = 'UTILIZADOR_PRETENDIDO'

quinta-feira, 19 de março de 2009

iBatis e Conjuntion OR

O uso da conjunction OR obriga a que se coloque um espaço antes da condição. Caso contrário o iBatis transforma tudo numa string sem espaços e dá um SQL inválido.

Exemplo:

<iterate conjunction="OR" property="params"><![CDATA[ ]]>param_1=#params[]# </iterate>

Sem o <![CDATA[ ]]> o SQL estaria todo pegado (sem espaços) e daria SQL inválido na Base de Dados

iBatis e uma Query com IN

Depois de andar às cabeçadas aqui vai a solução para como realizar uma query com IN no iBatis.

A classe ClasseParametros contém:
  • params_2 -> java.util.ListList
  • param_1 -> String

<update id="updateXpto"
parameterClass="ClasseParametros">
UPDATE tabela_xpto
SET param_1 = #param_1#
WHERE param_2 IN(
<iterate conjunction="," property="params_2">#params_2[]#</iterate>
)
</update>