🔄 MacroTranslator: Documentação de Macros Sankhya


🔄 MacroTranslator: Documentação de Macros Sankhya

Esta documentação descreve todas as macros suportadas pelo framework de persistência da Sankhya, explicando propósito, sintaxe, diferenças entre Oracle e MSSQL, e exemplos práticos.


🤔 Por que usar macros?

O uso do Macros Sankhya traz diversas vantagens, especialmente quando se busca portabilidade e manutenção de consultas SQL entre Oracle e MSSQL:

  • Unificação de Sintaxe: Permite escrever consultas SQL de forma unificada, abstraindo diferenças de sintaxe e funções entre Oracle e MSSQL. Isso reduz a necessidade de duplicar código ou criar ramificações específicas para cada banco.
  • Redução de Erros: Ao centralizar as diferenças em macros bem definidas, diminui-se o risco de erros causados por adaptações manuais ou esquecimentos de detalhes específicos da sintaxe de cada banco.
  • Facilidade de Manutenção: Alterações em regras de negócio ou ajustes de queries podem ser feitas em um único ponto, sem a necessidade de revisar múltiplas versões da mesma consulta.
  • Melhoria na Legibilidade: As macros tornam as consultas mais legíveis e expressivas, permitindo que o foco esteja na lógica de negócio em vez de detalhes técnicos de cada banco.

Índice


ignorecase

Propósito: Normaliza texto para comparação sem considerar maiúsculas/minúsculas e acentuação.

Sintaxe:

ignorecase(<expressão>)

Oracle:

TRANSLATE(UPPER(<expressão>),'ÁÉÍÓÚÃÕÂÊÎÔÛÀÈÌÒÙÇ','AEIOUAOAEIOUAEIOUC')

MSSQL:

REPLACE(UPPER(<expressão>),'ÁÉÍÓÚÃÕÂÊÎÔÛÀÈÌÒÙÇ','AEIOUAOAEIOUAEIOUC')

Exemplo:

ignorecase(NOME)

Exemplo de consulta:

SELECT * FROM CLIENTES WHERE ignorecase(NOME) = ignorecase('José');

normalizeText

Propósito: Remove acentuação e normaliza texto para comparação.

Sintaxe:

normalizeText(<expressão>)

Oracle:

CONVERT(UPPER(<expressão>), 'US7ASCII')

MSSQL:

REPLACE(UPPER(<expressão>),'ÁÉÍÓÚÃÕÂÊÎÔÛÀÈÌÒÙÇ','AEIOUAOAEIOUAEIOUC')

Exemplo:

normalizeText(NOME)

Exemplo de consulta:

SELECT * FROM CLIENTES WHERE normalizeText(NOME) LIKE normalizeText('%silva%');

nullValue

Propósito: Substitui valores nulos por um valor padrão.

Sintaxe:

nullValue(<expressão>, <valor padrão>)

Oracle:

NVL(<expressão>, <valor padrão>)

MSSQL:

ISNULL(<expressão>, <valor padrão>)

Exemplo:

nullValue(SALARIO, 0)

Exemplo de consulta:

SELECT nullValue(SALARIO, 0) AS SALARIO_CORRIGIDO FROM FUNCIONARIOS;

convertToNumber

Propósito: Converte expressão para número.

Sintaxe:

convertToNumber(<expressão>)

Oracle:

TO_NUMBER(<expressão>)

MSSQL:

CONVERT(NUMERIC, <expressão>)

Exemplo:

convertToNumber(VALOR)

Exemplo de consulta:

SELECT convertToNumber(PRECO) FROM PRODUTOS WHERE convertToNumber(PRECO) > 100;

maxLines

Propósito: Limita o número de linhas retornadas.

Sintaxe:

maxLines(<quantidade>)

Oracle:

AND ROWNUM <= <quantidade>

MSSQL:

TOP <quantidade>

Exemplo:

maxLines(10)

Exemplo de consulta:

SELECT maxLines(10) * FROM VENDAS ORDER BY DATA DESC;

yearMonth

Propósito: Retorna o ano e mês de uma data no formato YYYYMM.

Sintaxe:

yearMonth(<campo>)

Oracle:

(TO_NUMBER(TO_CHAR(<campo>,'YYYYMM')))

MSSQL:

(YEAR(<campo>) * 100) + MONTH(<campo>)

Exemplo:

yearMonth(DATA)

Exemplo de consulta:

SELECT yearMonth(DATA_VENDA) AS ANO_MES FROM VENDAS;

dbDate

Propósito: Retorna a data atual do banco.

Sintaxe:

dbDate()

Oracle:

SYSDATE

MSSQL:

GETDATE()

Exemplo:

dbDate()

Exemplo de consulta:

SELECT dbDate() AS DATA_ATUAL;

stringIndex

Propósito: Retorna a posição de uma substring dentro de uma string.

Sintaxe:

stringIndex(<src>, <trg>)

Oracle:

INSTR(<src>, <trg>)

MSSQL:

CHARINDEX(<trg>, <src>)

Exemplo:

stringIndex('abcde', 'cd')

Exemplo de consulta:

SELECT stringIndex(NOME, 'A') AS POSICAO FROM CLIENTES;

trim

Propósito: Remove espaços em branco das extremidades.

Sintaxe:

trim(<expressão>)

Oracle:

TRIM(<expressão>)

MSSQL:

LTRIM(RTRIM(<expressão>))

Exemplo:

trim(NOME)

Exemplo de consulta:

SELECT trim(NOME) FROM CLIENTES;

length

Propósito: Retorna o tamanho de uma string.

Sintaxe:

length(<expressão>)

Oracle:

LENGTH(<expressão>)

MSSQL:

DATALENGTH(<expressão>)

Exemplo:

length(NOME)

Exemplo de consulta:

SELECT length(NOME) AS TAMANHO FROM CLIENTES;

diffdays

Propósito: Calcula a diferença em dias entre duas datas.

Sintaxe:

diffdays(<data1>, <data2>)

Oracle:

TRUNC(<data1> - <data2>)

MSSQL:

DATEDIFF(DAY, <data2>, <data1>)

Exemplo:

diffdays(DATA_FIM, DATA_INICIO)

Exemplo de consulta:

SELECT diffdays(DATA_FIM, DATA_INICIO) AS DIAS FROM PROJETOS;

diffhour

Propósito: Calcula a diferença em horas entre duas datas.

Sintaxe:

diffhour(<data1>, <data2>)

Oracle:

((<data1> - <data2>) * 24)

MSSQL:

DATEDIFF(HOUR, <data2>, <data1>)

Exemplo:

diffhour(DATA_FIM, DATA_INICIO)

Exemplo de consulta:

SELECT diffhour(DATA_FIM, DATA_INICIO) AS HORAS FROM TAREFAS;

concatstr

Propósito: Concatena duas strings.

Sintaxe:

concatstr(<str1>, <str2>)

Oracle:

<str1> || <str2>

MSSQL:

<str1> + <str2>

Exemplo:

concatstr('A', 'B')

Exemplo de consulta:

SELECT concatstr(NOME, SOBRENOME) AS NOME_COMPLETO FROM CLIENTES;

quebraLinha

Propósito: Insere uma quebra de linha.

Sintaxe:

quebraLinha()

Oracle:

CHR(13)||CHR(10)

MSSQL:

CHAR(13)+CHAR(10)

Exemplo:

quebraLinha()

Exemplo de consulta:

SELECT NOME || quebraLinha() || ENDERECO AS DADOS FROM CLIENTES;

convertPtBrDate

Propósito: Converte data para formato brasileiro (DD/MM/YYYY).

Sintaxe:

convertPtBrDate(<data>)

Oracle:

TO_CHAR(<data>, 'DD/MM/YYYY')

MSSQL:

CONVERT(VARCHAR, <data>, 103)

Exemplo:

convertPtBrDate(DATA)

Exemplo de consulta:

SELECT convertPtBrDate(DATA_NASCIMENTO) AS DATA_BR FROM CLIENTES;

onlydate

Propósito: Retorna apenas a parte da data (sem hora).

Sintaxe:

onlydate(<data>)

Oracle:

TRUNC(<data>)

MSSQL:

DATEADD(DAY, DATEDIFF(DAY, 0, <data>), 0)

Exemplo:

onlydate(DATA)

Exemplo de consulta:

SELECT onlydate(DATA_VENDA) AS DATA_SEM_HORA FROM VENDAS;

truncWeek

Propósito: Retorna o início da semana da data.

Sintaxe:

truncWeek(<data>)

Oracle:

TRUNC(<data>, 'IW')

MSSQL:

CONVERT(DATE, DATEADD(DAY, -1, DATEADD(WK, DATEDIFF(WK, 0, <data> ), 0)), 103)

Exemplo:

truncWeek(DATA)

Exemplo de consulta:

SELECT truncWeek(DATA) AS INICIO_SEMANA FROM CALENDARIO;

truncMonth

Propósito: Retorna o início do mês da data.

Sintaxe:

truncMonth(<data>)

Oracle:

TRUNC(<data>, 'MM')

MSSQL:

CONVERT(DATE, DATEADD(DAY, (DATEPART(DAY, <data>) * -1) + 1, <data>), 103)

Exemplo:

truncMonth(DATA)

Exemplo de consulta:

SELECT truncMonth(DATA) AS INICIO_MES FROM CALENDARIO;

truncQarter

Propósito: Retorna o início do trimestre da data.

Sintaxe:

truncQarter(<data>)

Oracle:

TRUNC(<data>, 'Q')

MSSQL:

CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, <data>), 0), 103)

Exemplo:

truncQarter(DATA)

Exemplo de consulta:

SELECT truncQarter(DATA) AS INICIO_TRIMESTRE FROM CALENDARIO;

truncYear

Propósito: Retorna o início do ano da data.

Sintaxe:

truncYear(<data>)

Oracle:

TRUNC(<data>, 'YY')

MSSQL:

CONVERT(DATE, DATEADD(YY, DATEDIFF(YY, 0, <data>), 0), 103)

Exemplo:

truncYear(DATA)

Exemplo de consulta:

SELECT truncYear(DATA) AS INICIO_ANO FROM CALENDARIO;

truncDate

Propósito: Retorna apenas a parte da data (sem hora).

Sintaxe:

truncDate(<data>)

Oracle:

TRUNC(<data>)

MSSQL:

CONVERT(date, <data>)

Exemplo:

truncDate(DATA)

Exemplo de consulta:

SELECT truncDate(DATA) AS DATA_SEM_HORA FROM CALENDARIO;

convertToFloat

Propósito: Converte expressão para float.

Sintaxe:

convertToFloat(<expressão>)

Oracle:

<expressão>

MSSQL:

CONVERT(FLOAT, <expressão>)

Exemplo:

convertToFloat(VALOR)

Exemplo de consulta:

SELECT convertToFloat(PRECO) FROM PRODUTOS;

convertToVarchar

Propósito: Converte expressão para varchar.

Sintaxe:

convertToVarchar(<expressão>)

Oracle:

TO_CHAR(<expressão>)

MSSQL:

CONVERT(VARCHAR, <expressão>)

Exemplo:

convertToVarchar(VALOR)

Exemplo de consulta:

SELECT convertToVarchar(CODIGO) FROM PRODUTOS;

user.name

Propósito: Insere o nome do usuário/banco.

Sintaxe:

${user.name}

Oracle:

<usuário>

MSSQL:

<usuário>.

Exemplo:

SELECT * FROM ${user.name}TABELA

Exemplo de consulta:

SELECT * FROM ${user.name}CLIENTES;

sqldatabase

Propósito: Insere o nome do banco.

Sintaxe:

sqldatabase.<tabela>

Oracle:

<tabela>

MSSQL:

<usuário>.<tabela>

Exemplo:

SELECT * FROM sqldatabase.TABELA

Exemplo de consulta:

SELECT * FROM sqldatabase.CLIENTES;

leftPad

Propósito: Preenche à esquerda até o tamanho desejado.

Sintaxe:

leftPad(<coluna>, <caractere>, <tamanho>)

Oracle:

LPAD(<coluna>, <tamanho>, <caractere>)

MSSQL:

RIGHT(REPLICATE(<caractere>, <tamanho>) + <coluna>, <tamanho>)

Exemplo:

leftPad('123', '0', 5)

Exemplo de consulta:

SELECT leftPad(CODIGO, '0', 8) AS CODIGO_PAD FROM PRODUTOS;

subString

Propósito: Retorna parte de uma string.

Sintaxe:

subString(<coluna>, <início>, <fim>)

Oracle:

SUBSTR(<coluna>, <início>, <fim>)

MSSQL:

SUBSTRING(<coluna>, <início>, <fim>)

Exemplo:

subString('abcdef', 2, 3)

Exemplo de consulta:

SELECT subString(NOME, 1, 5) AS PRIMEIRAS_LETRAS FROM CLIENTES;

upperText

Propósito: Converte texto para maiúsculas.

Sintaxe:

upperText(<expressão>)

Oracle:

UPPER(<expressão>)

MSSQL:

UPPER(RTRIM(CONVERT(VARCHAR(4000),<expressão>)))

Exemplo:

upperText(NOME)

Exemplo de consulta:

SELECT upperText(NOME) AS NOME_MAIUSCULO FROM CLIENTES;

getMonth

Propósito: Retorna o mês de uma data.

Sintaxe:

getMonth(<data>)

Oracle:

TO_CHAR(<data>, 'MM')

MSSQL:

MONTH(<data>)

Exemplo:

getMonth(DATA)

Exemplo de consulta:

SELECT getMonth(DATA_NASCIMENTO) AS MES_NASC FROM CLIENTES;

getYear

Propósito: Retorna o ano de uma data.

Sintaxe:

getYear(<data>)

Oracle:

TO_CHAR(<data>, 'YYYY')

MSSQL:

YEAR(<data>)

Exemplo:

getYear(DATA)

Exemplo de consulta:

SELECT getYear(DATA_NASCIMENTO) AS ANO_NASC FROM CLIENTES;

getDay

Propósito: Retorna o dia de uma data.

Sintaxe:

getDay(<data>)

Oracle:

TO_CHAR(<data>, 'DD')

MSSQL:

DAY(<data>)

Exemplo:

getDay(DATA)

Exemplo de consulta:

SELECT getDay(DATA_NASCIMENTO) AS DIA_NASC FROM CLIENTES;

monYear

Propósito: Retorna mês e ano de uma data.

Sintaxe:

monYear(<data>)

Oracle:

TO_CHAR(<data>, 'MM/YYYY')

MSSQL:

FORMAT(<data>, 'MM/yyyy')

Exemplo:

monYear(DATA)

Exemplo de consulta:

SELECT monYear(DATA_NASCIMENTO) AS MES_ANO FROM CLIENTES;

addMonths

Propósito: Soma meses a uma data.

Sintaxe:

addMonths(<data>, <quantidade>)

Oracle:

ADD_MONTHS(<data>, <quantidade>)

MSSQL:

DATEADD(MONTH, <quantidade>, <data>)

Exemplo:

addMonths(DATA, 2)

Exemplo de consulta:

SELECT addMonths(DATA_VENDA, 3) AS DATA_FUTURA FROM VENDAS;

endOfCurrentMonth

Propósito: Retorna o último dia do mês atual.

Sintaxe:

endOfCurrentMonth()

Oracle:

LAST_DAY(SYSDATE)

MSSQL:

EOMONTH(GETDATE())

Exemplo:

endOfCurrentMonth()

Exemplo de consulta:

SELECT endOfCurrentMonth() AS FIM_MES_ATUAL;

convertToTimestamp

Propósito: Converte expressão para timestamp.

Sintaxe:

convertToTimestamp(<expressão>)

Oracle:

TO_TIMESTAMP(<expressão>)

MSSQL:

CONVERT(DATETIME, <expressão>)

Exemplo:

convertToTimestamp(DATA)

Exemplo de consulta:

SELECT convertToTimestamp(DATA) AS DATA_TIMESTAMP FROM LOGS;

convertToMilliseconds

Propósito: Converte expressão para milissegundos.

Sintaxe:

convertToMilliseconds(<expressão>)

Oracle:

EXTRACT(MILLISECOND FROM <expressão>)

MSSQL:

DATEPART(MILLISECOND, <expressão>)

Exemplo:

convertToMilliseconds(DATA)

Exemplo de consulta:

SELECT convertToMilliseconds(DATA) AS MILIS FROM LOGS;