Agrupamento e Ordenação:


  • #GROUP

Definição: Em consultas onde o agrupamento não pôde ser feito pela consulta este macro instrui ao broker para agrupar o resultado pelos campos informados nos parâmetros.

Exemplo:#CALL millenium.clientes.lista(); #GROUP(bairro); 


  • #ORDER

Definição: Em consultas onde a ordenação não pôde ser feita pela consulta esta macro instrui ao broker para ordenar o resultado pelos campos informados nos parâmetros.

Exemplo:#CALL millenim.acoes.lista(); #ORDER(codigo);


  • #PJMASTER

Definição: Serve para fazer várias consultas que tem uma chave em comum mantendo as consultas relacionadas entre si com esta chave devolvendo ao cliente como se fosse uma única consulta, deve ser sempre usada com o #PJSLAVE e o campo usado como parâmetro deve estar em todas as consultas. Será exibido apenas um item para cada chave do #PJSLAVE.

Exemplo: #PJMASTER(produto) SELECT produto, cod_produto, descricao1 FROM produtos;

#PJSLAVE(produto) SELECT produto, foto FROM fotos;


  • #PJSLAVE

Definição: Veja #PJMASTER.


  • #ROWSET

Definição: Esta macro tem como função agregar uma sub-consulta para cada ocorrência da consulta à que a mesma se refere, tendo como obrigatório o nome desta consulta para constar nos resultados do método. Seu uso pode ser encadeado tendo a estrutura definida como registro no editor de métodos. Como parâmetro recebe a nova consulta nomeada ou uma chamada de outro método usando a macro #CALL.

Exemplos: SELECT:main  cliente, gerador, nome #ROWSET(“SELECT:CONTATOS nome

FROM contatos_cliente WHERE cliente=:main.CLIENTE”)

#ROWSET(#CALL:ENDERECO Millennium.enderecos_cadastro.consulta( gerador=:main.gerador) FROM CLIENTES;


Aritmética

  • #ABS

Definição: Este macro é usado para substituir pela função correspondente à retornar o número absoluto sem sinal. Recebe como parâmetro o número que se deseja tirar o sinal.

Exemplo: SELECT #ABS(valor_inicial) FROM lancamentos;


  • #CEIL

 Definição: Este macro é usado para substituir pela função correspondente a retornar um número inteiro arredondado sempre para cima de um número real. Recebe como parâmetro a real.

Exemplo: SELECT #CEIL(valor_inicial) FROM lancamentos;

  • #DIV

Definição: Este macro é usado para substituir pela função correspondente à fazer uma divisão de inteiros ou seja retorna apenas a parte inteira da divisão. Recebe como parâmetros o dividendo e o divisor.

Exemplo: SELECT #DIV(7,2) as valor FROM DUAL;


  • #FLOOR

Definição: Este macro é usado para substituir pela função correspondente a retornar  um número inteiro arredondado sempre para baixo de um número real. Recebe como parâmetro o número real.

Exemplo: SELECT #FLOOR(valor_inicial) FROM lancamentos;


  • #MAX_NUM

Definição: Este macro é usado para substituir pela função correspondente a retornar o maior entre dois valores. Recebe como parâmetros as expressões que serão comparadas.

Exemplo: SELECT #MAX_NUM(numero1, numero2) as valor FROM DUAL;


  • #MIN_NUM

Definição: Este macro é usado para substituir pela função correspondente a retornar o menor entre dois valores. Recebe como parâmetros as expressões que serão comparadas.

Exemplo: SELECT #MIN_NUM(numero1, numero2) as valor FROM DUAL;

                 

  • #MOD

Definição: Este macro é usado para substituir pela função correspondente à retornar o resto de uma divisão de inteiros. Recebe como parâmetros o dividendo e o divisor.

Exemplo: SELECT #MOD(7,2) as valor FROM DUAL; 



  • #ROUND


Definição: Este macro é usado para substituir pela função correspondente a retornar um número inteiro arredondado de um número real. Recebe como parâmetro o número real.


Exemplo: SELECT #ROUND(valor_inicial) FROM lancamentos;



  • #SIGN


Definição: Este macro é usado para substituir pela função correspondente à retornar o sinal de um determinado número. Recebe como parâmetro o número que se deseja obter o sinal.


Exemplo: SELECT #SIGN(valor_inicial) FROM lancamentos;



  • #SQRT


Definição: Essa macro é usada para substituir pela função correspondente de se obter a raiz quadrada de um número. Recebe como parâmetro apenas o númeto 

Exemplo: SELECT #SQRT(valor_inicial) FROM lancamentos;             

 

Controle e sub-rotinas


  • #CALL

Definição: Esta macro tem como função chamar um outro método que pode ser usado como uma consulta em outros métodos. Recebe como parâmetros um nome e o método a ser executado com seus respectivos parâmetros.

Exemplo: #CALL:param Millennium.configurações.consulta();


  • #CHECK

Definição: Este macro tem como função fazer validações e retornar um erro caso a condição seja atendida. Recebe como parâmetros uma consulta, uma expressão de condição e a mensagem de erro que será retornada ao Client.

Exemplo: #CHECK(“SELECT COUNT(*) as N FROM DUAL”,n>0,”Quantidade inválida”);

                 

  • #EACH

Definição: Usado com relação de registros para executar uma ação para cada item da mesma, pode ser usados os itens nomeados da relação na ação seguinte e só será executada uma ação. A Relação pode ser proveniente de um parâmetro do método ou mesmo o resultado de um comando. Não tem parâmetro formal, mas após a declaração coloca-se o comando ou o nome do parâmetro podendo ainda re-nomear, no caso de parâmetro com a cláusula AS.

 

Exemplo:                                                                  

#EACH() SELECT:c cor FROM cores; INSERT INTO cor_prod (cor, produto) VALUES (:c.COR, :produto) #NO

Definição: Este macro apenas é substituído pela data e hora atual no formato exigido pelo SGDB em uso, Não existem parâmetros.

Exemplo: SELECT #NOW() FROM DUAL;

#RETURN(cor_prod);


  • #FETCHALL

Definição: Por padrão quando é feita uma consulta, os registros são retornados por demanda do servidor de banco de dados, ou seja conforme são acessados, entretanto, existem casos especiais onde se faz necessário processar todos os registros de uma única vez, e é aí que se usa esta macro antes destas consultas. Não existem parâmetros.

Exemplo:#FETCHALL() SELECT produto FROM produtos;


  • #NOERROR

Definição: Este macro tem como função ignorar qualquer erro que acontecer no comando seguinte. Não é necessário nenhum parâmetro.


  • #NOFILTER

Definição: Usado em conjunto com o recurso de filtros de usuários. Em algumas consultas é necessário que mesmo configurado algum filtro de usuário (Loja, Conta, etc..) não seja respeitado o filtro devendo retornar todos os registros. Para isto antes da consulta coloca-se este macro sem nenhum parâmetro requerido.


  • #NOFILTER_SESSION

Definição: Este macro funciona de maneira semelhante ao #NOFILTER, com a diferença de manter o comando por todo o script e não apenas na consulta seguinte. Nenhum parâmetro é requerido.


  • #NOPROTECT

Definição: Este macro desabilita a proteção de segurança não aplicando os filtros padrão no servidor. Não existem parâmetros.

Exemplo: #NOPROTECT() SELECT * FROM FILIAIS;


  • #PRIVATE

Definição: por padrão os resultados das consultas dentro do método são retornados, mas existem casos em que estes atrapalham. Se for feita uma consulta para buscar um dado que será usado como parâmetro para a consulta principal e a mesma tem resultado nulo, e o método terá um resultado não nulo. Então se coloca este macro antes da consulta para informar que este resultado não faz parte do resultado.


  • #TOP

Definição: Este macro tem como objetivo trazer as N primeiras linhas do resultado de um método do broker, não funciona igual ao comando FIRST, porque ele vai processar todos os registros e retornar apenas os n primeiros registros da consulta. Recebe como parâmetro o número de linhas que se deseja.

Exemplo: #TOP(5) SELECT nome FROM CLIENTES; 


Dados Temporários


  • #CREATETABLE

Definição: Este macro é usado para criar uma tabela temporária que será destruída logo após o término da execução do script. Recebe como parâmetros as definições dos campos, pode-se ser usado em conjunto com o #SET para guardar o nome da tabela criada em uma variável..

Exemplo: 

#SET(TBL, ${#CREATETABLE(cliente INT, cont INT)}) ;

SELECT * FROM #REPLACE(TBL);


  • #CREATEVIEW 

Definição: Usado para se criar uma Visão SQL temporária que será usada durante toda a transação e destruída após. Recebe como parâmetro a consulta SQL desejada e retorna o nome da visão para usar em outros lugares, alternativamente pode-se  definir o nome da visão usando : (dois pontos) após a cláusula SELECT.

Exemplo:

#CREATEVIEW(SELECT:CLIENTES_SP  * FROM clientes WHERE UFIE=”SP”);

SELECT * FROM #REPLACE(CLIENTES_SP);

Nota: comando mantido por  compatibilidade, pode-se usar o sub-select


  • #VIEW

Definição, semelhante ao #CREATEVIEW  só que  é para ser usado como um sub-select, e o broker reaproveita a view ou mesmo usa um subselect na transformação

Excemplo SELECT * FROM #VIEW(SELECT * FROM clientes WHERE ufie='SP');

Nota: comando mantido por  compatibilidade, pode-se usar o sub-select


Formatação


  • #NULL_TO_N

Definição: Este macro é usado para substituir pela função correspondente à transformação de campos do tipo numérico com valor nulo em um valor padrão prédefinido. Recebe como parâmetros o nome do campo e o valor padrão para o caso de valor nulo.

Exemplo: SELECT #NULL_TO_N(numero,1) as valor FROM DUAL;


  • #NULL_TO_S

Definição: Este macro é usado para substituir pela função correspondente à transformação de campos do tipo caractere com valor nulo ou vazio em um valor padrão pré-definido. Recebe como parâmetros o nome do campo e o valor padrão para o caso de valor nulo.

Exemplo: SELECT #NULL_TO_S(nome,”ZE”) as nome FROM DUAL;


  • #NULL_TO_Z

Definição: Este macro é usado para substituir pela função correspondente à transformação de campos do tipo numérico com valor nulo em 0. Recebe como parâmetro o nome do campo.

Exemplo: SELECT #IIF_N(numero) as valor FROM DUAL;


  • #REPLACE

Definição: Coloca fixo no comando o valor da variável atribuída. Pode ser utilizado em qualquer lugar do comando.

Exemplos: SELECT * FROM #REPLACE(tabela);

SELECT * FROM produtos WHERE produto = #REPLACE (produto);

SELECT #REPLACE (campos) FROM produtos;


  • #REPLACETR

Definição: Parecido com o #REPLACE, a diferença é que ele formata a cadeia de caracteres para ser usado com o comando LIKE do SQL colocando o caractere % no inicio e no final da mesma.

Exemplo: SELECT * FROM clientes WHERE nome LIKE #REPLACETR(nome); #REPLACEUFMT(CPF),”###.###.###-##”) as cpf  FROM GERADORES;

              

  • #REPLACET

Definição: Parecido com o #REPLACE, a única diferença é que ele coloca o valor da variável formatado usando aspas para cadeias de caracteres (Strings) e datas (assim como coloca as datas em formato correto para o Broker utilizar). Exemplo: SELECT * FROM clientes WHERE nome =


  • #REPLACEFMT

Definição: Este macro é usado para substituir o valor retornado por um valor formatado por uma determinada mascara de formatação. Recebe como parâmetros o nome do campo e a máscara para a formatação.

Exemplo: SELECT #REPLACEFMT(CPF),”###.###.###-##”) as cpf  FROM GERADORES;

                 

  • #REPLACEUFMT

Definição: Este macro é usado para substituir o valor retornado por um valor onde se é removido toda a formatação ficando apenas os números. Recebe como parâmetro o nome do campo.

Exemplo: SELECT #REPLACEUFMT(CPF) FROM GERADORES;


  • #TRANSLATE

Definição: Este macro é usado para substituir pela função correspondente à transformação de campos em um valor condicional ou tradução de valores. Recebe como parâmetros o nome do campo, os valores que serão recebidos e os valores convertidos separados por dois pontos e opcionalmente um ELSE no final para os valores não encontrados, se o ELSE não for estabelecido e for encontrado um valor não definido será gerado um erro.


Exemplo: SELECT #TRANSLATE(tipo_sexo,'M':'Masculino','F':'Feminino',else:'Indefinido') from geradores


  • #SELECT

Definição: Este macro tem como objetivo trazer um valor condicional para um campo, na verdade ele converte a expressão para a função Natural do SGDB em uso. No caso do Firebird, a partir da versão 2.1, será convertido para CASE WHEN. Recebe como parâmetro a expressão que deverá ser usada e os parâmetros conseguintes devem ter o valor referido seguido de dois pontos mais o resultado que se espera como resultado, paliativamente no último deles pode ser usado um else para informar que qualquer outro resultado usará este valor, sugerido para evitar erros.

Exemplo: SELECT #SELECT(tipo_sexo, ”M”:”Homem”, ”F”:”Mulher”, ELSE:”Indeterminado”) as Sexo FROM CLIENTES;

Neste caso o comando será traduzido para : 

SELECT nome, CASE WHEN tipo_sexo=”M” THEN “Homem” WHEN tipo_sexo=”F” THEN “Mulher” ELSE “Indetermiado” END as Sexo FROM CLIENTES; 


Manipulação de Datas

  • #DATEDIFF

Definição: Este macro é usado para substituir pela função correspondente a retornar a diferença entre duas datas. Recebe como parâmetros as datas desejadas.

Exemplo: SELECT #DATEDIFF(data_vencimento,data_pagamento) FROM lancamentos;


  • #DAY

Definição: Este macro é usado para substituir pela função correspondente a retornar o dia de uma determinada data. Recebe como parâmetro a data desejada.

Exemplo: SELECT #DAY(data_vencimento) FROM lancamentos;


  • #MONTH

Definição: Este macro é usado para substituir pela função correspondente a retornar o dia de uma determinada data. Recebe como parâmetro a data desejada.

Exemplo: SELECT #DAY(data_vencimento) FROM lancamentos;


  • #WEEK

Definição: Este macro apenas é substituído pela semana atual. Não existem parâmetros.

Exemplo: SELECT #WEEK () FROM DUAL;


  • #WEEKDAY

Definição: Este macro é usado para substituir pela função correspondente à retornar o dia da semana de uma determinada data. Recebe como parâmetro a data.

Exemplo: SELECT #SELECT(#WEEKDAY(data_pagamento),’1’:’Dom’,’2’:’Seg’,’3’:’Ter’,’4’:’Qua’,’5’:’Qui’,’6’:’Sex’,’7’:’Sab’) FROM lancamentos;


  • #YEAR

Definição: Este macro é usado para substituir pela função correspondente a retornar o dia de uma determinada data. Recebe como parâmetro a data desejada.

Exemplo: SELECT #DAY(data_vencimento) FROM lancamentos; 


Manipulação de Strings

  • #LPAD

Definição: Este macro é usado para substituir pela função correspondente à concatenar uma cadeia de caracteres com espaços à esquerda até formar o tamanho desejado. Recebe como parâmetros a cadeia de caracteres e o tamanho desejado.

Exemplo: SELECT #LPAD(“ABC”,10) FROM dual;


  • #MAKELIST

Definição: Converte um parâmetro de conjunto de registros em uma estrutura de valores separados por vírgula, geralmente usado em cláusula IN do SELECT. Recebe como parâmetros o nome do campo parâmetro e o nome do campo que será usado para convertê-lo em lista.

Exemplo: SELECT  * FROM filiais WHERE filial IN #MAKELIST (FILIAIS,ITEM);


  • #RPAD

Definição: Este macro é usado para substituir pela função correspondente à concatenar uma cadeia de caracteres com espaços à direita até formar o tamanho desejado. Recebe como parâmetros a cadeia de caracteres e o tamanho desejado.

Exemplo: SELECT #RPAD(“ABC”,10) FROM dual;


  • #STR_LEN

Definição: Este macro é usado para substituir pela função correspondente à retornar o tamanho de uma determinada cadeia de caracteres (String). Recebe como parâmetro a cadeia de caracteres e retorna o seu tamanho.

Exemplo: SELECT #STR_LEN(nome) FROM clientes


  • #SUBSTR

Definição: Este macro é usado para substituir pela função correspondente à retornar uma parte de uma cadeia de caracteres. Recebe como parâmetros a cadeia de caracteres, o caractere de inicio e o tamanho desejado.


Exemplo: SELECT #SUBSTR(“ABCDEF”,2,3) FROM dual;

 

Tabulação de dados

Tabulação de dados é quando temos uma grade de dados que são armazenados no banco de forma normalizada e dependendo de um cadastro queremos que apareça como se fossem o mesmo registro, um exemplo de uso é para a grade de tamanhos e cores e desejamos mostrar o estoque. Para esta finalidade usamos o recurso criado pelo #CROSSDATA em conjunto com o #PIVOT (que define o cabeçalho). Os retornos destas funções são cadeias de caracteres formadas de outras cadeias separadas por aspas e vírgulas. Os componentes de relatórios e algumas funções de tela, entendem esta formatação montando a grade final para o usuário. Vejamos as funções.

  • #CROSSDATA

Definição: Com auxílio de algumas funções de agrupamento e do #PIVOT, faz uma grade de valores tabulados. É usado, por exemplo, para montar um relatório com grade de tamanhos no cabeçalho. O #PIVOT determina o cabeçalho da tabulação. Recebe como parâmetro o nome das colunas (podem ser várias) que receberão os dados agrupados, estas devem ser definidas no layout como String e com um tamanho razoável, pois irão conter os valores tabulados com aspas e vírgulas, depois uma lista dos campos que definem o agrupamento entre parênteses como penúltimo parâmetro, e por fim se os valores não encontrados no cabeçalho serão omitidos (true) ou não (false).

Exemplo: #CROSSDATA(quantidade,(cod_produto),true);

SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_COUNT(e.cor as numero_cores) FROM produtos p INNER JOIN estoques e ON p.produto = e.produto;

#PIVOT(tamanhos, tamanho, tamanho, grade)

SELECT tamanho as tamanhos, tamanho FROM tamanhos 

WHERE grade = :data.grade;

 

  •    #CROSS_AVG

Definição: Auxiliar do #CROSSDATA serve para tirar a média simples de valor em uma determinada coluna respeitando o agrupamento definido anteriormente. Recebe como parâmetro a coluna onde deve ser tirada a média.

Exemplo: #CROSSDATA(quantidade,(cod_produto),true);

SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_AVG(e.saldo as saldo_medio) FROM produtos p INNER JOIN estoques e ON p.produto = e.produto;

#PIVOT(tamanhos, tamanho, tamanho, grade)

SELECT tamanho as tamanhos, tamanho FROM tamanhos 

WHERE grade = :data.grade;


  • #CROSS_COUNT

Definição: Auxiliar do #CROSSDATA serve para contar a quantidade de ocorrências de valor de uma determinada coluna respeitando o agrupamento definido anteriormente. Recebe como parâmetro a coluna onde devem ser contados os valores.

Exemplo: #CROSSDATA(quantidade,(cod_produto),true);

SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_COUNT(e.cor as numero_cores) FROM produtos p INNER JOIN estoques e ON p.produto = e.produto;

#PIVOT(tamanhos, tamanho, tamanho, grade)

SELECT tamanho as tamanhos, tamanho FROM tamanhos 

WHERE grade = :data.grade;


  • #CROSS_FIRST

 Definição: Auxiliar do #CROSSDATA serve para pegar a primeira ocorrência de valor em uma determinada coluna respeitando o agrupamento definido anteriormente. Recebe como parâmetro a coluna que se quer usar.

Exemplo: #CROSSDATA(quantidade,(cod_produto),true);

SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_FIRST(e.obs)

FROM produtos p INNER JOIN estoques e ON p.produto = e.produto;

#PIVOT(tamanhos, tamanho, tamanho, grade)

SELECT tamanho as tamanhos, tamanho FROM tamanhos 

WHERE grade = :data.grade;


  • #CROSS_SUM

Definição: Auxiliar do #CROSSDATA serve para somar uma determinada coluna respeitando o agrupamento definido anteriormente. Recebe como parâmetro a coluna que deve ser agrupada.

Exemplo: #CROSSDATA(quantidade,(cod_produto),true);

SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_SUM(e.saldo)

  FROM produtos p INNER JOIN estoques e ON p.produto = e.produto;

#PIVOT(tamanhos, tamanho, tamanho, grade)

SELECT tamanho as tamanhos, tamanho FROM tamanhos 

WHERE grade = :data.grade;


  • #CROSS_SUM_FLD, #CROSS_COUNT_FLD, #CROSS_AVG_FLD e #CROSS_FIRST_FLD

Definição: Funcionam de forma semelhante aos seus originais, veja a definição acima.


  • #PIVOT

Definição: Auxiliar mandatório do #CROSSDATA serve para definir o cabeçalho da tabulação desejada. Recebe como parâmetro a coluna que será usada como cabeçalho, esta deve ser definida no layout com um tamanho razoável, pois irá conter os valores tabulados com aspas e vírgulas,  o nome da coluna chave da consulta principal, o nome da coluna chave da consulta secundária, e opcionalmente o nome da coluna de quebra, esta se o cabeçalho não for fixo.

Exemplo: #CROSSDATA(quantidade,(cod_produto),true);

SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_FIRST(e.obs)

FROM produtos p INNER JOIN estoques e ON p.produto = e.produto;

#PIVOT(tamanhos, tamanho, tamanho, grade)

SELECT tamanho as tamanhos, tamanho FROM tamanhos 

WHERE grade = :data.grade;

 

 

Variáveis

  • #DATE

Definição: Este macro apenas é substituído pela data atual no formato exigido pelo SGDB em uso, Não existem parâmetros.

Exemplo: SELECT#DATE() FROM DUAL;


  • #NOW

Definição: Este macro apenas é substituído pela data e hora atual no formato exigido pelo SGDB em uso, Não existem parâmetros.

Exemplo: SELECT #NOW() FROM DUAL;


  • #RETURN

Definição: Esta macro serve para informar ao Broker qual é o campo que será utilizado como contador dentro de um INSERT utilizando o counters.nsu e retornando o valor no resultado do método se a variável for definida no resultado do mesmo.

Exemplo: INSERT INTO COR_PROD (produto, cor) VALUES (:produto, :cor) #NOW

Definição: Este macro apenas é substituído pela data e hora atual no formato exigido pelo SGDB em uso, Não existem parâmetros.

Exemplo: SELECT #NOW() FROM DUAL;

#RETURN(cor_prod);


  • #SET

Definição: Este macro é usado para armazenar valores em variáveis. Os parâmetros são o nome da variável e o valor que se quer atribuir. Se utilizado no segundo parâmetro o símbolo $ o valor atribuído será o resultado do comando e não o seu conteúdo literal.

Exemplo: #SET(nome,”Arlindo”)

SELECT #REPLACET(nome) from dual;

#SET(TBL, ${#CREATETABLE(cliente INT, cont INT)})  SELECT * FROM #REPLACE(TBL);


  • #TIME

Definição: Este macro apenas é substituído pela hora atual no formato exigido pelo SGDB em uso, Não existem parâmetros.

Exemplo: SELECT #TIME() FROM DUAL;


  • #USER

Definição: Este macro apenas é substituído pelo nome do usuário atual. Não existem parâmetros.

Exemplo: SELECT#USER() FROM DUAL;

 

  • #USERGROUP

Definição: Este macro retorna o nome do grupo ao qual o usuário que está logado pertence. Não existem parâmetros.

Exemplo: SELECT  #USERGROUP() FROM DUAL; 


  • Sem rótulos