quinta-feira, 31 de agosto de 2017

Inglês Técnico: Lista de Termos

Como programador, não é mais do que obrigação nós possuir um certo domínio na língua inglesa. A maioria dos cursos, certificados e conteúdo de qualidade está nesta língua. Entretanto, mesmo assim, alguns termos usados por nós em português podem nos escapar. Por isso que estou criando este post. Essa é uma postagem que vou atualizando conforme a necessidade que vou encontrando ou sugestões (e não se incomode se a lista estiver pequena por ora).

  • Chamado: Service Call, Ticket.
    Ex: Eu vou abrir um chamado.
    I will open a Service Call/ticket
  • {}


sexta-feira, 25 de agosto de 2017

Oracle: Como fazer um "Split" em uma string

O caso é simples: em um parâmetro de uma procedure, eu recebo uma sequencia de números separados por vírgula para ser usado em uma condição IN. Mas o problema é que Oracle não tem uma função que separa os números conforme as vírgulas. Como resolver isso? Você pode fazer o seguinte:

select 
    regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) 
from dual
connect by 
    regexp_substr('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, level) is not null;

Isso vai separar as os itens em linhas de tabela. Você pode usar essa consulta na condicional do IN para indicar que o campo tem que estar naquela string.

quinta-feira, 24 de agosto de 2017

ASP.NET: Códigos ASP no HTML (ASPX)

As vezes estamos tão no automático que nem lembramos das outras opções que nós deveríamos usar. Foi no caso de eu estar editando um ASPX e inserir um código HTML gerado pelo back code. O problema foi que eu me acostumei a usar o "<%: comando %>", que fez o HTML aparecer no texto. Então vou deixar registrado aqui as outras sintaxes dos outros controles:

  • <% x %>: Indica trecho do código a ser processado no lado do servidor;
  • <%@ x %>: Indica uma Diretiva, ou seja, comandos que indica o que fazer com a página, como importar um script;
  • <%$ x %>: Indica acesso algum recurso, como uma propriedade no webconfig;
  • <%= x %>: Equivale ao comando Response.Write(), ou seja, escreve algo na página;
  • <%# x %>: Indica uma Databinding
  • <%-- x %>: Indica um comentário
  • <%: x %>: Escreve algo na página, mas codificando os caracteres como "<" ou ">" para aparecer na página.
No meu caso, como eu tinha usado a última opção, ele codificou os caracteres que marcavam as tags, fazendo que os mesmos aparecessem. Trocar para o quarto dessa lista resolveu o problema.

quarta-feira, 23 de agosto de 2017

C#/Oracle: Problemas com parâmetros de uma Stored Procedure

Estava eu programando no C# em um método que registra um cadastro no Oracle usando uma Stored Procedure. Por algum motivo, eu recebia uma Exception indicando problemas em converter um número e isso estava me incomodando, ainda mais porque as vezes o cadastro era executado com sucesso.
Então fui conferir os dados cadastrados e percebi que alguns dados estavam sendo registrado na coluna errada. Ah! Devo ter errado quando criei o Insert, mas quando fui conferir, estava tudo certo.
Foi então que percebi que o problema estaria nos parâmetros. Eu modifiquei a ordem em que era processado os parâmetros no C#, e a ordem coincidia com os dados trocados.
Foi aí que aprendi que para o Oracle DataAccess, mesmo especificando o nome do parâmetro que está inserindo, o que importa é a ordem dos dados que está sendo inserido.

sexta-feira, 18 de agosto de 2017

Oracle: Adicionando Dias/Horas/Minutos/Segundos ao um campo do tipo DATE

Algum tempo atrás, eu estava com problemas em verificar a diferença entre duas TimeStamps no MySQL. Um dos fatores que registrei foi as inúmeras soluções bizarras que as pessoas fizeram para contornar o problema, que envolviam dividir, e multiplicar os tempos, soma, converte, e dá-lhe gambiarras incompreensíveis. Algo parecido aconteceu comigo agora pouco, mas com Oracle.

O problema foi o seguinte: tenho um dado "Date" e preciso adicionar x minutos. Pesquisei, e a maioria dá uma resposta mirabulante, pega um dia, divide pelo números de segundos de um dia, multiplique por x, converte, desconverte, e fica um código feio, deselegante e cheia de cálculos que se você não sabe do que se trata, vai demorar para entender. Funçando um pouco na documentação, acho algo simples que resolve este problema: a função NUMTODSINTERVAL.

Deixa eu mostrar com um exemplo:

SYSDATE + NUMTODSINTERVAL(60,'MINUTE')

Simples e elegante. O SYSDATE representa o meu dado do tipo DATE, que no exemplo, pega a data e hora do sistema. Adicionando com essa função, na qual estou adicionando 60 minutos. Troca o "+" por "-", você subtrai. E também, no segundo parâmetro, além do 'MINUTE' posso alterar para 'DAY', 'HOUR' e 'SECOND'. Sem converter, sem nada.

Então fica a dica.

quarta-feira, 9 de agosto de 2017

Arquivo de Casos Inexplicáveis: Entity Framework e Stored Procedure

Quando criei esse blog, a intenção é registrar as minhas experiências para consultas futuras. A maioria dos casos são de situações que não é tão fácil de se encontrar, até mesmo na Internet, ou coisas que só a experiência pode te ajudar.
Em todos os casos, existia um problema e uma solução lógica, mas acabou de acontecer comigo,  um problema que resolveu de uma maneira tão inusitada e ilógica, que vale a pena documentar. Mas como é algo que não sei como explicar o motivo, criei essa nova seção: O Arquivo de Casos Inexplicáveis.
Não é a primeira vez que tenho um Caso Inexplicável, mas acho interessante começar a registrá-los. Mas chega de enrolar, e vamos ao caso.

Estava realizando uma modificação em um módulo aqui onde trabalho e precisei modificar uma Stored Procedure num banco SQL Server. Então, para ter certeza que as modificações estavam fazendo efeito, tive a ideia: vou deixar um breakpoint onde é executado a Stored Procedure (SP) no código e verificar o que retorna pelo debugger.
Aí começou meu inferno, depois de atualizar o Entity Framework para aceitar a nova SP, e testar, sempre que tentava visualizar o seu dado, via que a execução deu um erro e quando deixava passar, uma Exception era lançada.
Não entendi nada, deletei a SP, atualizei a Entity Framework e reinseri a SP, para adicioná-la novamente, restaurava o código do repositório, testava a SP no próprio banco de dados, e nada resolvia o erro.
Até que, por um motivo, eu resolvi tirar o breakpoint. A partir daí, o módulo voltava a sua execução normal com a SP modificada. Eu não sei a razão do Entity Framework bugar quando tento depurar, aliás, esses tipos de bugs tem até um nome que o classifica: Heinsenbug, ou seja, a tentativa de eu tentar verificar o problema altera o comportamento do objeto a ser observado.
Entretanto, esse Heinsenbug é um problema do Entity Framework, então, acredito que não tem muito que eu possa fazer.

quinta-feira, 3 de agosto de 2017

C#/Entity Framework: Bug ao atualizar o modelo => Duplicação de Código

Um bug que aconteceu comigo: estava tentando adicionar uma tabela do banco para o modelo, entretanto, quando a tabela é adicionada, ao atualizar os códigos internos do framework, acontecia um bug: basicamente o código gerado ficava duplicado, triplicado, n-plicado.

Descobri que o problema era causado porque a tabela em questão possuía um campo do tipo "TEXT". Alterei a tabela para VARCHAR(4000) e funcionou de boa.

Moral da história: Não use campo do tipo TEXT se for usar Entity Framework.