SELECT SINGLE vs SELECT UP TO 1 ROWS

images/thumbnail.jpg - Thumbnail

É pá, esta é uma daquelas discussões infinitas que nunca chegarão a lado nenhum. Igual a tentar decidir se mereces continuar a viver se meteres ananás na pizza ou queijo Filadélfia no sushi.

SELECT de registo único com chave incompleta

images/thumbnail.png - Thumbnail

Durante anos explicaram-me que se deve usar UP TO 1 ROWS quando a chave não é completa. A minha professora primária disse que devemos sempre perguntar porquê: porquê? Ninguém explica.

SELECT FOR UPDATE

images/thumbnail.jpg - Thumbnail

Quando vais modificar registos na base de dados é comum fazeres primeiro um SELECT para ver como as coisas são e depois então fazeres UPDATE como as coisas serão.

Classe para garantir segurança em programação dinâmica

images/thumbnail.jpg - Thumbnail

No outro dia encontrei um programa que gerava um comando SQL com base em várias variáveis fixadas no código. Mas, por distracção ou ignorância, a alminha que fez aquilo achou que fazia sentido associar essas variáveis a símbolos de texto. Algo assim:

ABAP Code PushDown em HANA

images/thumbnail.jpg - Thumbnail

[Artigo por Artur Moreira]

A SAP introduziu a partir da versão 7.4 do ABAP o conceito de Code PushDown, que significa utilizar mais a base de dados para cálculos (agregação de dados, somas e vários cálculos prévios).

SQL nativo

images/thumbnail.jpg - Thumbnail

Por vezes o SQL do ABAP não te permite fazer coisas que conseguirias fazer usando SQL nativo da base de dados. É possível fazê-lo.

ZTOAD - Editor de SQL

images/thumbnail.jpg - Thumbnail

O Toad é uma ferramenta muito famosa no mundo SQL que permite construir e executar queries SQL de forma fácil e interactiva. E agora, graças ao senhor Sébastien HERMANN, o SAP tem uma versão simplificada desta ferramenta maravilha.

Ele explica.

Obrigado Sérgio Fraga por descobrires isto.

O Abapinho saúda-vos.

SELECT de um conjunto de valores conhecidos

images/thumbnail.jpg - Thumbnail

Pedem-te para seleccionares registos cujo critério é um conjunto de meia dúzia de códigos que são conhecidos e nunca vão mudar. Sabias que podes fazer tudo logo no SELECT?

CASE dentro de SELECT (brevemente em todos os SAPs)

images/thumbnail.jpg - Thumbnail

Prepara-te porque em breve terás muitas surpresas. É que o ABAP está a aprender troques novos. Repara neste:

CONSTANTS:
  lc_menina TYPE STRING VALUE ‘MENINA',
  lc_menino TYPE STRING VALUE ‘MENINO’,
  lc_senhor TYPE STRING VALUE ’SENHOR’,
  lc_senhora TYPE STRING VALUE ‘SENHORA’.

SELECT nome,
 CASE
   WHEN sexo_id = ‘M' AND idade < 18 THEN @lc_menino
   WHEN sexo_id = ‘F’ AND idade < 18 THEN @lc_menina
   WHEN sexo_id = ‘M' AND idade >=18 THEN @lc_senhor
   WHEN sexo_id = ‘F’ AND idade >=18 THEN @lc_senhora
 END AS titulo
FROM zpessoa
WHERE pessoa_id = @pessoa_id
INTO CORRESPONDING FIELDS OF @lt_pessoas.

Só tens de esperar pela versão 7.40.

INNER JOIN vs FOR ALL ENTRIES vs RANGES artificiais

images/thumbnail.jpg - Thumbnail

Uma vez que as operações de dados estão muito mais optimizadas no servidor de base de dados do que no ABAP, é sempre preferível o primeiro. FOR ALL ENTRIES só deve ser usado quando não se conseguir fazer INNER JOIN (como com a BSEG por exemplo). Quando possível, usar RANGES artificiais é preferível a usar FOR ALL ENTRIES mas é preciso cuidado para não ultrapassar o limite do parser de SQL. Depende do servidor de base de dados mas regra geral é de evitar RANGES com mais de 1000 linhas. Claro que ao usar FOR ALL ENTRIES nunca te podes esquecer de verificar que a tabela interna não está vazia caso contrário todas as entradas da tabela serão lidas.