MD Software
MillenniumBrokerMacros do Broker

Controle e Sub-rotinas

#CALL

Definição: Chama outro método, permitindo reutilizar consultas em outros métodos.

Utilidade: Modularização e reutilização de código SQL.

Especificação:

#CALL:nome_alias caminho_do_método(parametros)

Exemplo:

#CALL:param Millennium.configuracoes.consulta();

#CHECK

Definição: Realiza validações e retorna um erro caso a condição seja atendida.

Utilidade: Implementar validações condicionais em consultas.

Especificação:

#CHECK("consulta_sql", condição, "mensagem_de_erro")

Exemplo:

#CHECK("SELECT COUNT(*) AS n FROM DUAL", n > 0, "Quantidade inválida");

#EACH

Definição: Itera sobre um REGISTRO (array/lista) e executa comandos SQL para cada item individualmente.

Um REGISTRO é criado quando se atribui uma variável (:VARIAVEL) a um resultado de SELECT. O macro #EACH() permite processar cada elemento deste registro separadamente.

Formas de Uso:

  1. Comando único - use ponto e vírgula no final:
#EACH() :PEDIDOS AS P;
DELETE FROM PEDIDO_VENDA WHERE PEDIDOV = :P.PEDIDOV;
  1. Múltiplos comandos - use estrutura #BEGIN/#END; (com ponto e vírgula apenas no final):
#EACH() :PEDS AS P
#BEGIN
UPDATE PEDIDO_VENDA SET STATUS = 'CANCELADO' WHERE PEDIDOV = :P.PEDIDOV;
DELETE FROM PEDIDO_ITENS WHERE PEDIDOV = :P.PEDIDOV;
#CALL:log Millennium.log.registrar_operacao('Cancelamento', :P.PEDIDOV);
#END;

Variações de Parâmetros:

  1. Parâmetro do método - sem os dois pontos, acessa parâmetros do próprio método:
#EACH() TAREFAS AS T1
#BEGIN
  UPDATE TAREFAS SET STATUS = 'CONCLUIDO' WHERE ID = :T1.ID;
  INSERT INTO HISTORICO (TAREFA_ID, DATA) VALUES (:T1.ID, SYSDATE);
#END;
  1. Sem alias (AS) - acessa diretamente pelo nome do registro:
#EACH() :RETORNO
#BEGIN
  #CALL:nn millenium.bordero.FormataNossoNumeroCobrebem(NOSSO_NUMERO=:RETORNO.NOSSO_NUMERO);
  #CALL:nd millenium.bordero.FormataNossoNumeroCobrebem(NOSSO_NUMERO=:RETORNO.DUPLICATA);
#END;
  1. **SELECT direto com atribuição da variável ** - realiza a consulta e itera sobre o resultado:
#EACH()
SELECT:T0 AGENDA_PRODUCAO FROM AGENDA_PRODUCAO
WHERE AGENDA_PRODUCAO.PRODUCAO = :PRODUCAO AND #NULL_TO_S(LINHA_BASE,FALSE) = TRUE
#BEGIN
  DELETE FROM AGENDA_PRODUCAO WHERE AGENDA_PRODUCAO = :T0.AGENDA_PRODUCAO;
  DELETE FROM AGENDA_PRODUCAO_DETALHE WHERE AGENDA_PRODUCAO = :T0.AGENDA_PRODUCAO;
#END;

#FETCHALL

Definição: Força a consulta a processar todos os registros de uma única vez.

Utilidade: Necessário em casos especiais onde é preciso processar todos os registros imediatamente.

Especificação:

#FETCHALL()

Exemplo:

#FETCHALL()
SELECT produto FROM produtos;

#NOERROR

Definição: Ignora qualquer erro que ocorrer no comando seguinte.

Utilidade: Prosseguir com a execução mesmo que ocorram erros.

Especificação:

#NOERROR()

#NOFILTER

Definição: Ignora os filtros de usuário configurados (como Loja, Conta, etc.), retornando todos os registros.

Utilidade: Necessário quando a consulta deve ignorar filtros de segurança aplicados por padrão.

Especificação:

#NOFILTER()

Exemplo:

#NOFILTER()
SELECT * FROM filiais;

#NOFILTER_SESSION

Definição: Similar ao #NOFILTER, mas mantém o comportamento para todo o script.

Utilidade: Aplicar o #NOFILTER a todas as consultas do script.

Especificação:

#NOFILTER_SESSION()

#NOPROTECT

Definição: Desabilita a proteção de segurança, não aplicando os filtros padrão no servidor.

Utilidade: Usado em casos onde é necessário acesso total aos dados sem restrições.

Especificação:

#NOPROTECT()

Exemplo:

#NOPROTECT()
SELECT * FROM FILIAIS;

#PRIVATE

Definição: Indica que o resultado da consulta não deve fazer parte do resultado final do método.

Utilidade: Evitar que consultas intermediárias apareçam no resultado final.

Especificação:

#PRIVATE()

Exemplo:

#PRIVATE()
SELECT * FROM tabela_intermediaria;

#TOP

Definição: Limita o número de registros retornados pelo método do broker às N primeiras linhas.

Utilidade: Restringir a quantidade de dados retornados.

Especificação:

#TOP(número_de_linhas)

Exemplo:

#TOP(5)
SELECT nome FROM CLIENTES;

On this page