Transact-SQL

Terminei o último texto com essa frase: “uma função que levou um pouco mais de uma hora para ser feita em php (e em python) levou um dia inteiro para ser feita em Transact-SQL”.

Pois bem. a história não acabou por aí. Devido a umas questões de arredondamento e ponto flutuante, a função em Transact-SQL não retornava o resultado esperado. Como solução, implementamos a mesma em python (como havia sido feita desde o começo). Como estou com python 2.3 e o pymssql requer o python 2.4, o acesso ao banco foi feito por um webservice em PHP, sendo acessado pelo cliente python. Não consegui me entender com o ZSI e fazer um webservice funcionar no mod_python. Mas a implementação está funcionando.

Mas trabalhar com o Transact-SQL foi um desafio! Primeiro: uma procedure (função que não retorna nada) e uma function (função que retorna alguma coisa) são tratadas de formas diferente. Na primeira posso usar raiseerror, na segunda, não. Outros problemas:

  • Não existe algo do tipo “CREATE OR REPLACE FUNCTION” – preciso apagá-la e recriá-la novamente, sempre.
  • Não existe loop FOR – a única estrutura de LOOP existente é o WHILE.
  • A atribuição de variáveis é feia, devido à ausência de um operador diferente para comparar e atribuir. Assim, temos:
  IF (LEN(@letras) = 1) //comparação
  SET @temp = ’999′; // atribuição
 

Nem preciso dizer que durante o desenvolvimento eu esquecia de praticamente todos os SETS.

Horrível. Horrível. A sintaxe do PL/PgSQL é bem melhor. Até a do MySQL acho que é melhor.

UPDATE 05/01/2007: Parece que o Nando andou tendo seu quinhão de dor de cabeça com o SQL Server recentemente

This entry was posted in PostgreSQL, SQL Server and tagged , , . Bookmark the permalink.

3 Responses to Transact-SQL

  1. Que tal postar um artigo comparando Transact-SQL, PL/PgSQL e MySQL, com alguns exemplos de sintaxe?

  2. Adriano [Visitante] says:

    Precisa ler o Books On-Line pra saber mais de Transact SQL.
    Existem milhões de procedimentos realizados nessa linguagem aceito pelo padrão ANSI SQL. Sem mencionar sobre TIPOS DE DADOS COMO DATAS etc… O tratamento nessa linguagem é bem melhor.

    Sobre o APAGAR E CONSTUIR.. vc utiliza uma instrução ALTER alguma coisa…
    ALTER TABLE .. .ALTER FUNCTION etc…
    Lembrando que isso sim é padrão ANSI. O que é mais importante.
    Sobre estruturas de repetições.
    1º Existem outros tipos de estruturas de repetições.
    2º voce pode utilizar ate cursores se precisar.
    3º WAITFOR é um tipo de estrutura de repetição bem interessante. Tem a sintaxe dele no Books.

    Bom, o mais dificil mesmo é programar coisas dinamicas. Como criar CROSS-TAB por exemplo.
    Isso é complicado em Transact SQL, mais ainda nao consegui fazer funcionar algo do tipo em outras linguagens.
    Muitos erros diversos de memoria, conversoes etc. Isso nao acontece com o Transact SQL.
    Se quer um exemplo de CROSS TAB dinâmica, faça uma pesquisa sobre esse item no SQL MONSTER, provavelmente irá ver meu algoritmo. ATS. Adriano

  3. Olá Adriano!

    De fato, uma das coisas que eu gostaria de saber mais é sobre T-SQL.

    Porém, não reclamo do tratamento de datas e dos procedimentos realizados em PL/PgSQL, que
    é o que uso atualmente! Aliás, falta tempo pra se fazer tudo o que se quer…

    []‘s
    - Walter

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>