Skip to content

Tag-icone-mini.png Programação, Banco de Dados

Referenciado por: Introdução a Programação de Banco do Totali Commerce |

Comandos e Funções ​

Definição Básica de Scripts (*.mac) ​

Os script serão compostos pelas seguintes partes:

  • Texto Livre;
  • Macros;

Texto Livre ​

Nesta área serão escritos os comandos SQL que são iguais para ambas as linguagens. Caso o texto possua palavras mapeadas para substituição estas serão substituídas na execução.

MacroOraclePostgreSQL
DATEDateTimestamp

Macros ​

As macros devem estar entre os seguintes caracteres %%< e >%% e se definem da seguinte forma.

%%<Macro(Parâmetros)>%%

Elas são executadas e o resultado é inserido em sua posição.

Os Parâmetros para macro podem ser:

  • Numérico: Valores reais ou inteiros.

Exemplo:

345.09

  • Strings: Texto que deve ser colocado entre aspas simples.

Exemplo:

Texto

Caso se deseje imprimir uma aspas simples seve se utilizar barra seguida da mesma.

Exemplo: Outro texto - \'texto entre aspas\'

Saíra da seguinte maneira:

Outro texto 'texto entre aspas'

  • Lista de repetição: Cria uma repetição nos passando cada parâmetro a cada repetição. Os parâmetros podem ser números, string ou Macros.

Exemplo:

[1,2,3,4,5]

ou

['a','b','c','d']

ou

[Str('a'),1,'oi',1]

  • Incrementar: Valores que auto-incrementam a cada repetição. Definido da seguinte forma:

  • Crescente: .Nro.. Onde Nro é um número inteiro.

Exemplo:

.1..

  • Decrescente: ..Nro. Onde Nro é um número inteiro.

Exemplo:

.10..

Por exemplo em uma repetição o incremento .6.. irá gerar os seguintes resultados: 6,7,8,9,10...

  • Macro: Uma macro pode chamar outra macro ou ela mesma recursivamente. O seu resultado deve gerar uma saída em forma numérica, string ou incrementar.

Definição de Macros ​

As macros são compostas pelas seguintes partes:

  • Nome: Utilizado para chamar posteriormente a mesma.

  • Nro de Parâmetros: Número de parâmetros da macro. Se for colocado o número como 0 (zero) o template entenderá a macro como uma palavra de substituição.

Exemplo:

Date-> Timestamp

ou

NVL-> Covalesce

Caso se defina uma função com um número de parâmetros e se utilize outro na execução o sistema gerará um erro.

  • Descrição: Descrição da macro para fins de documentação.
  • Sintaxes (PL/SQL e PL/PGSQL): Expressão de saída para a macro em cada linguagem (PL/SQL e PL/PGSQL).

É definida pelas seguintes partes:

  • Texto Livre: Texto a ser gerado pela macro (Observação: Aconselha-se trocar ' por \' )

  • Parâmetros: Os número precedidos de # serão substituídos pelos respectivos parâmetros passados.

Exemplo:

%%<funcaoteste('a','b','c','d')%>

  • Sintaxe para PL/SQL: teste #1 - #2 - #3 - #4

Saída:

teste a - b - c - d

  • Macros: outra macro pode ser chamada deste que seja utilizados os marcadores %%< e >%%

  • Comando: {#X,Expressão} conforme descrição posterior

  • Layout de saída [[][]]: conforme descrição posterior

  • Diretivas - {$IFDEF}: conforme descrição posterior

Lista de Comandos ​

1) {#X, Expressão} e {!#X, Expressão}

{#X, Expressão}

O segundo parâmetro nos colchetes somente é considerado se o parâmetro (#X) conter um valor ou uma lista encadeada

{!#X, Expressão}

É o contrário do comando anterior, ou seja o segundo parâmetro nos colchetes somente é considerado se o parâmetro (#X) estiver vazio.

Expressão = Caracteres, parâmetros, funções e comandos

Exemplo:

%%<FunçãoExemplo('',0)%%>

Comando: {#1,'Não mostrará esta mensagem porque o primeiro parâmetro está vazio'};

Comando: {#2,'Mostrará porque o segundo parâmetro foi informado', Valor #2'}

Resultado: Mostrará porque o segundo parâmetro foi informado, Valor 0

Comando: {!#1,'Mostrará esta mensagem porque o primeiro parâmetro está vazio'}

Resultado: Mostrará esta mensagem porque o primeiro parâmetro está vazio

Comando: {!#2,'Não mostrará porque o segundo parâmetro foi informado', Valor #2'}

Resultado:

2) [ ]

Repetição para parâmetros do tipo lista encadeada. Sempre que um dos parâmetros de uma função for uma lista. Seus valores serão repetidos na área de máscara o número de vezes que possuir elementos.

Sintaxe [ Expressão ]

Expressão = Um caracter ou uma lista de caracteres (O caracter é repetido conforme o número de itens do parâmetro)

Expressão = Um parâmetro (Cada repetição corresponderá a um valor da lista encadeada)

Expressão = .X.. ou ..X. (Cada repetição o valor X irá ser incrementado ou decrementado)

Expressão = {#X,Expressão} (A expressão é retorna somente se o item de lista encadeada do parâmetro for preenchido)

Expressão = Funções, comandos

Exemplo:

%%<FunçãoExemplo([UM,DOIS,TRES],[DOIS,QUATRO,DEZ],['','',QUATRO])%%>

Função:

[[.1..) Total de: #1 + #1 é igual a #2 #3{- #3}]]

[]]

Resultado:

  1. Total de UM + UM é igual a DOIS
  2. Total de DOIS + DOIS é igual a QUATRO
  3. Total de TRÊS + TRÊS é igual a DEZ - QUATRO

3) [[][]]

Layout de saída para o comando de repetição de parâmetros do tipo lista encadeada.

Sintaxe [[ expressão ]caracter[ expressão ]caracter]

caracter = Qualquer caracter ou caracteres

Exemplo:

Comando: [[.1..) Total de: #1 + #1 é igual a #2];

[].]

Resultado:

  1. Total de UM + UM é igual a DOIS;
  2. Total de DOIS + DOIS é igual a QUATRO;
  3. Total de TRÊS + TRÊS é igual a SEIS.

Exemplos:

Comando: [[#1], []] Resultado: UM, DOIS, TRÊS Comando: [[#1], [#1 Terminou]] Resultado: UM, DOIS, TRÊS Terminou

1) <<Expressão, Expressão Antiga, Expressão Nova>>

Repassa em uma Texto a substring Antiga pela nova. Semelhante ao comando Replace de algumas linguagens.

Expressão = Caracteres, parâmetros, funções e comandos

Exemplo:

%%<FunçãoExemplo('O comando sysdate retorna a data')>%%

Comando: <<'#1','sysdate' ,'agora()'>>

Resultado: O comando agora() retorna a data Templates

1) Diretivas - {$IFDEF}

Permite criar códigos exclusivos de uma única linguagem em um mesmo template.

Sintaxe

{$IFDEF linguagem}

...

{$ENDIF}

linguagem = PL/SQL ou PL/pgSQL

2) Exemplo de template

/*-- SEQ 0001 --*/ -- Objetivo: -- 1) Obter o valor da cotacao de uma moeda num determinado dia %%<BeginFunction('Cambio','Real', ['pMOEDA','pDATA'], ['TD_MOE.CODTAB%TYPE','Date'], [ , ])>%% COTACAO real; BEGIN -- Moeda corrente do Pais IF pMOEDA = 0 THEN RETURN 1; ELSE -- Cria componentes temporarios SELECT nvl(VLRREF,0) INTO COTACAO FROM TT_CAM WHERE CODMOE = pMOEDA AND TO_CHAR(DATREF, %%<STR('DD/MM/YYYY')>%% ) = TO_CHAR(pDATA, %%<STR('DD/MM/YYYY')>%% );
RETURN nvl(COTACAO,0); END IF; {$IFDEF PL/SQL} EXCEPTION -- Provavelmente ocorrera se nao encontrar nenhum registro WHEN OTHERS THEN RETURN 0; {$ENDIF} %%<EndFunction('Cambio','Real',,)>%%

3) Resultado em Oracle

/*-- SEQ 0001 --*/ -- Objetivo: -- 1) Obter o valor da cotacao de uma moeda num determinado dia CREATE OR REPLACE FUNCTION Cambio (pMOEDA IN TD_MOE.CODTAB%TYPE , pDATA IN Date ) RETURN Real IS COTACAO real; BEGIN -- Moeda corrente do Pais IF pMOEDA = 0 THEN RETURN 1; ELSE -- Cria componentes temporarios SELECT COALESCE(VLRREF,0) INTO COTACAO FROM TT_CAM WHERE CODMOE = pMOEDA AND TO_CHAR(DATREF, 'DD/MM/YYYY' ) = TO_CHAR(pDATA, 'DD/MM/YYYY' ); RETURN COALESCE(COTACAO,0); END IF; EXCEPTION -- Provavelmente ocorrera se nao encontrar nenhum registro WHEN OTHERS THEN RETURN 0; END Cambio;

4) Resultado em PostGreSQL

/*-- SEQ 0001 --*/ -- Objetivo: -- 1) Obter o valor da cotacao de uma moeda num determinado dia CREATE OR REPLACE FUNCTION Cambio (TD_MOE.CODTAB%TYPE,Timestamp) RETURNS Real AS ' DECLARE pMOEDA ALIAS FOR $1 ; pDATA ALIAS FOR $2 ; COTACAO real; BEGIN -- Moeda corrente do Pais IF pMOEDA = 0 THEN RETURN 1; ELSE -- Cria componentes temporarios SELECT COALESCE(VLRREF,0) INTO COTACAO FROM TT_CAM WHERE CODMOE = pMOEDA AND TO_CHAR(DATREF, DD/MM/YYYY ) = TO_CHAR(pDATA, DD/MM/YYYY ); RETURN COALESCE(COTACAO,0); END IF; END;

' language 'plpgsql';