Embora a sintaxe SQL SELECT padrão seja suportada para consultas em um banco de dados externo, existem vários pontos a serem considerados. É necessário prefixar o nome da tabela com a palavra-chave Database para indicar que SELECT deve ser direcionado no banco de dados externo, em vez de em uma estrutura de repetição na mensagem.
O formato básico de SELECT do banco de dados é:
SELECT ... FROM Database.TABLE1 WHERE ...
Se necessário, você pode especificar um nome de esquema:
SELECT ... FROM Database.SCHEMA.TABLE1 WHERE ...
em que SCHEMA é o nome do esquema no qual a tabela TABLE1 está definida. Inclua o esquema se o ID do usuário, com o qual você está executando, não corresponder ao esquema. Por exemplo, se seu ID do usuário for USER1, a expressão Database.TABLE1 será equivalente a Database.USER1.TABLE1. No entanto, se o esquema associado à tabela no banco de dados for db2admin, será necessário especificar Database.db2admin.TABLE1. Se não incluir o esquema e ele não corresponder ao seu ID de usuário atual, o intermediário gerará um erro de tempo de execução quando uma mensagem for processada pelo fluxo de mensagens.
SELECT ... FROM Database.DataSource.SCHEMA.TABLE1 WHERE ...
Qualifique as referências a nomes de colunas com o nome da tabela ou da correlação definido para a tabela pela cláusula FROM. Portanto, onde você normalmente pode executar uma consulta, como:
SELECT column1, column2 FROM table1
você deve gravar um dos dois formatos a seguir:
SELECT T.column1, T.column2 FROM Database.table1 AS T SELECT table1.column1, table1.column2 FROM Database.table1
Isto é necessário para distinguir referências a colunas do banco de dados de quaisquer referências a campos em uma mensagem que também podem aparecer em SELECT:
SELECT T.column1, T.column2 FROM Database.table1 AS T WHERE T.column3 = Body.Field2
SELECT T.column1 AS price, T.column2 AS item FROM Database.table1 AS T WHERE...
O padrão seleciona todas as opções SQL que são suportadas na cláusula SELECT. Se você utilizar esta opção, deverá qualificar os nomes de colunas com o nome da tabela ou o nome da correlação definido para a tabela. Por exemplo:
SELECT T.* FROM Database.Table1 AS T
Quando utilizar procedimento ESQL e nomes de funções dentro de uma consulta de banco de dados, o posicionamento deles dentro da chamada afetará o modo como esses dados serão processados. Se for determinado que o procedimento ou função afeta os resultados retornados pela consulta, ele não será processado como ESQL e será transmitido como parte da chamada do banco de dados.
Isso se aplica principalmente ao tentar utilizar um procedimento ou um nome de função com os identificadores de colunas dentro da instrução SELECT.
Por exemplo, se uma instrução CAST for utilizada em um identificador de colunas especificado na cláusula Select, ela será utilizada durante a consulta do banco de dados para determinar o tipo dos dados que estão sendo retornados para essa coluna. Um CAST ESQL não é executado nesse tipo de dados ESQL e os dados retornados são afetados pela interpretação da interação do banco de dados desse tipo de dados.
Se uma função ou procedimento for utilizado em um identificador de coluna especificado na cláusula WHERE, ele será transmitido diretamente para o gerenciador do banco de dados para processamento.
Os exemplos nos tópicos subseqüentes ilustram como os conjuntos de resultados de consultas do banco de dados externo são representados no WebSphere Message Broker. Os resultados de consultas do banco de dados são designados a campos em uma mensagem utilizando um nó Compute.
Uma função de coluna é uma função que utiliza os valores de uma única coluna em todas as linhas selecionadas de uma tabela ou mensagem e retorna um único resultado escalar.