Pergunta

Estamos trazendo um novo projeto internamente e enquanto anteriormente todo o nosso trabalho era no SQL Server, o novo produto usa um back-end Oracle.

Alguém pode aconselhar alguma planilha de referência ou algo parecido que forneça a uma pessoa do SQL Server como eu um resumo de quais são as principais diferenças - Gostaria de poder começar a trabalhar o mais rápido possível.

Foi útil?

Solução

@hamishcmcn

Sua afirmação de que '' == Null simplesmente não é verdadeira.No mundo relacional, Null só deve ser interpretado como "não sei".O único resultado que você obterá do Oracle (e da maioria dos outros bancos de dados decentes) ao comparar um valor com Nulo é 'Falso'.

Na minha cabeça, as principais diferenças entre o SQL Server e o Oracle são:

  • Aprenda a amar as transações, elas são suas amigas - o commit automático não é.
  • Consistência de leitura e falta de leituras de bloqueio
  • Banco de dados SQL Server == Esquema Oracle
  • PL/SQL é muito mais rico em recursos do que T-SQL
  • Aprenda a diferença entre uma instância e um banco de dados no Oracle
  • Você pode ter mais de uma instância Oracle em um servidor
  • Não há assistentes pontiagudos (a menos que você realmente os queira)

Todos os outros, por favor me ajudem e adicionem mais.

Outras dicas

A principal diferença que notei ao migrar do SQL Server para o Oracle foi que no Oracle você precisa usar cursores nas instruções SELECT.Além disso, as tabelas temporárias são usadas de forma diferente.No SQL Server você pode criar uma em um procedimento e depois DROP no final, mas no Oracle você já deve ter uma tabela temporária criada antes da execução do procedimento.

Eu também examinaria os tipos de dados, pois eles são bem diferentes.

Concatenação de strings:
Oráculo:|| ou concat()
Servidor SQL:+

Esses links podem ser interessantes:
http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm
http://www.mssqlcity.com/Articles/Compare/sql_server_vs_oracle.htm (antigo:Ora9 versus SQL 2000)

@hamishmcn

Geralmente isso é uma má ideia.Tabelas temporárias no Oracle devem apenas ser criadas e deixadas (a menos que sejam desativadas/muito raramente usadas).O conteúdo da tabela temporária é local para cada sessão e truncado quando a sessão é fechada.Não faz muito sentido pagar o custo de criação/descarte da tabela temporária, pode até resultar em conflitos se dois processos tentarem criar a tabela ao mesmo tempo e commits inesperados ao executar DDL.

O que você perguntou aqui é um tópico enorme, especialmente porque você realmente não disse para que está usando o banco de dados (por exemplo, você irá de TSQL -> PL/SQL ou apenas alterará o banco de dados back-end do seu aplicativo java está conectado?)

Se você realmente quer usar sua escolha de banco de dados em seu potencial, sugiro que você se aprofunde um pouco mais e leia algo como Arquitetura especializada de banco de dados Oracle:Técnicas e soluções de programação 9i e 10g por Tom Kyte.

Cuidado com a diferença na forma como a string vazia é tratada.
INSERT INTO atable (a_varchar_column) VALUES ('');

é o mesmo que

INSERT INTO atable (a_varchar_column) VALUES (NULL);

eu não tenho sqlserver experiência, mas entendo que isso diferencia os dois

Se necessário, você pode criar e eliminar tabelas temporárias em procedimentos usando o Executar imediatamente comando.

para andy47, não quis dizer que você pode usar a string vazia em uma comparação, mas o oracle a trata como nula se você usá-la em um insert.Releia minha entrada e tente o seguinte SQL:

CREATE TABLE atable (acol VARCHAR(10));
INsERT INTO atable VALUES( '' );
SELECT * FROM atable WHERE acol IS NULL;

E para evitar uma situação de "sim, é, não, não é", aqui está um link externo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top