A função PASSTHRU avalia uma expressão e executa a cadeia de caracteres resultante como uma instrução de banco de dados, retornando um conjunto de resultados.
A função PASSTHRU é semelhante à instrução PASSTHRU, que é descrita em Instrução PASSTHRU.
O uso principal da função PASSTHRU é emitir SELECTs complexos, não suportados atualmente pelo intermediários, para os bancos de dados. (Exemplos de SELECTs complexos não suportados atualmente pelo intermediário são aqueles que contêm cláusulas GROUP BY ou HAVING.)
A primeira expressão é avaliada e a cadeia de caracteres resultante é transmitida para o banco de dados apontado por DatabaseReference (na cláusula TO) para execução. Se a cláusula TO não for especificada, será utilizado o banco de dados apontado pelo atributo data source do nó.
Utilize pontos de interrogação (?) na cadeia de banco de dados para indicar parâmetros. Os valores de parâmetros são fornecidos pela cláusula VALUES.
Se a cláusula VALUES for especificada, suas expressões serão avaliadas e transmitidas ao banco de dados como parâmetros; (ou seja, os pontos de interrogação serão substituídos pelos valores das expressões na instrução de banco de dados).
Se apenas uma expressão VALUE existir, o resultado pode ou não ser uma lista. Se for uma lista, os pontos de interrogação serão substituídos pelos valores escalares da lista, seqüencialmente. Se não for uma lista, o ponto de interrogação (único) será substituído pelo valor escalar único na instrução de banco de dados. Se mais de uma expressão VALUE existir, nenhuma das expressões é avaliada para uma lista; seus valores escalares são substituídos seqüencialmente pelas interrogações, ao invés.
Como a instrução do banco de dados é construída pelo programa do usuário, não é essencial a utilização de marcadores de parâmetro (ou seja, as interrogações) ou a cláusula VALUES, porque toda a instrução do banco de dados pôde ser fornecida, como uma cadeia literal, pelo programa. Entretanto, use marcadores de parâmetro sempre que possível porque isto reduz o número de instruções diferentes que precisam ser preparadas e armazenadas no banco de dados e no intermediário.
Uma referência ao banco de dados é uma instância especial das referências de campos utilizadas para referir-se às árvores de mensagens. Consiste na palavra Database seguida pelo nome de uma origem de dados (ou seja, o nome de uma instância de banco de dados).
Você pode especificar o nome da origem de dados diretamente ou por uma expressão entre chaves ({...}). Um nome de origem de dados especificado diretamente está sujeito à substituição de nome. Ou seja, se o nome utilizado tiver sido declarado como um nome conhecido, o valor do nome declarado será utilizado no lugar do próprio nome (consulte Instrução DECLARE).
É possível que ocorram erros durante as operações PASSTHRU. Por exemplo, o banco de dados pode não estar operacional ou a instrução pode estar inválida. Nesses casos, uma exceção é lançada (a menos que o nó tenha sua propriedade Lançar exceção em caso de erro no banco de dados apagada). Essas exceções configuram os valores apropriados de código SQL, estado, erro nativo e texto de erro e podem ser tratadas por rotinas de tratamento de erro (consulte a instrução DECLARE HANDLER).
Para obter informações adicionais sobre como manipular erros do banco de dados, consulte Capturando o Estado do Banco de Dados.
SET OutputRoot.XML.Data.SelectResult.Row[] = PASSTHRU('SELECT R.* FROM Schema1.Table1 AS R WHERE R.Name = ? OR R.Name = ? ORDER BY Name' TO Database.DSN1 VALUES ('Name1', 'Name4'));
O exemplo acima designa o conjunto de resultados à árvore de corpo da mensagem OutputRoot pertencente ao analisador XML Genérico, que permite mensagens de autodefinição.
Se estiver designando o conjunto de resultados a uma árvore de mensagens pertencente a um dos analisadores MRM, e a estrutura do conjunto de resultados corresponder exatamente à definição de mensagem MRM, o conjunto de resultados poderá ser designado diretamente à árvore de corpo da mensagem OutputRoot.
Se a estrutura do conjunto de resultados não corresponder exatamente à definição de mensagem MRM, você deverá primeiro designar o conjunto de resultados a um tipo de dados ROW ou a uma árvore Environment que não tenha nenhum analisador associado a ela. Os dados necessários podem ser designados a OutputRoot para construir uma árvore de mensagens em conformidade com a definição de mensagem.