A instrução CREATE cria um novo campo de mensagem.
O novo campo de mensagem é posicionado em um local especificado (CREATE FIELD) ou relativo a um local existente atualmente (CREATE... OF...). Novos campos podem ser criados apenas quando a referência de campo de destino apontar para uma mensagem modificável, por exemplo, Environment, InputLocalEnvironment, OutputLocalEnvironment, OutputRoot ou OutputExceptionList.
Se a cláusula FIELD for incluída, o campo especificado por "target" será navegado para (criando os campos, se necessário) e qualquer cláusula values ou cláusula from será executada. O formato de instrução CREATE não cria, necessariamente, nenhum dos campos; ele apenas assegura que os campos especificados existem.
SET OutputRoot.XML.Message.Structure[2].Field = ...
pelo menos uma instância de Estrutura já deverá existir na mensagem. Ou seja, os únicos campos na árvore que são criados são em um caminho direto da raiz para o campo identificado pela referência de campo.
Se uma cláusula PREVIOUSSIBLING, NEXTSIBLING, FIRSTCHILD ou LASTCHILD for incluída, o campo especificado por target será navegado para (criando os campos, se necessário) exatamente da mesma forma como para a cláusula FIELD. Um novo campo é então criado e anexado na posição especificada (por exemplo, como PREVIOUSSIBLING ou FIRSTCHILD). Este formato de instrução CREATE sempre cria um novo campo e coloca-o na posição especificada.
Se duas instruções de destino CREATE FIRSTCHILD OF forem utilizadas, a segunda instrução criará um novo campo como o primeiro filho do destino e deslocará o primeiro filho criado anteriormente para a direita na árvore de mensagens(portanto, ele não é mais o primeiro filho). De forma semelhante, o destino CREATE LASTCHILD OF navega para o campo de destino e inclui um novo campo como seu filho mais à direita, deslocando o último filho anterior para a esquerda.
o destino CREATE PREVIOUSSIBLING OF cria um campo imediatamente à esquerda do campo especificado por destino (portanto, a profundidade da árvore não é alterada); de forma semelhante, o destino CREATE NEXTSIBLING OF cria um campo logo à direita do campo especificado por destino. Ao criar PREVIOUSSIBLING ou NEXTSIBLING, você pode utilizar a palavra-chave REPEAT para copiar o tipo e nome do novo campo a partir do campo atual.
Se presente, a cláusula AS move a variável de referência denominada para apontar o campo recém-criado. Isso é útil, pois é provável que você deseje envolver o novo campo em algum processamento adicional.
Se presente, a cláusula DOMAIN associa o novo campo a um novo analisador do tipo especificado. Esta cláusula espera um nome de campo raiz (por exemplo, XML ou MQRFH2). Se a cláusula DOMAIN estiver presente, mas o valor fornecido for uma cadeia de caractere de comprimento zero, será criado um novo analisador do mesmo tipo que o analisador que possui o campo especificado por destino. Será emitida uma exceção se o nome de domínio fornecido não for do tipo de dados CHARACTER ou se seu valor for NULL. Não especifique a cláusula DOMAIN com a cláusula FIELD; não há garantias que o novo campo será criado.
Para a cláusula VALUES, o tipo, nome e valor (ou qualquer subconjunto deles) podem ser especificados por qualquer expressão que retorne um tipo de dados adequado (INTEGER para tipo, CHARACTER para nome e qualquer tipo escalar para valor). Será emitida uma exceção se o valor fornecido para um tipo ou nome for NULL.
NAMESPACE | NAME | Elemento denominado da seguinte forma |
---|---|---|
Não | Não | O elemento não possui nome (sinalizador de nomes não definido automaticamente) |
Não | Sim | Ao elemento é dado o nome especificado em um espaço de nomes selecionado a partir do caminho |
Sim | Não | Ao elemento é dado o nome vazio no espaço de nomes especificado |
Sim | Sim | Ao elemento é dado o nome no espaço de nomes especificado |
A cláusula IDENTITY utiliza um único elemento de caminho em lugar das cláusulas TYPE e NAME e segue todas as regras descritas no tópico para referências de campos (consulte Referências de Campos ESQL).
Para a cláusula FROM, o tipo, nome e valor do novo campo são tomados de SourceFieldReference. Quaisquer campos filhos existentes são desanexados (o campo poderia já existir no caso de uma cláusula FIELD) e o novo campo recebe cópias dos filhos, netos e outros descendentes do campo de origem.
Se uma cláusula PARSE estiver presente, será construída uma subárvore sob o campo recém-criado, a partir do fluxo de bits fornecido. O algoritmo para fazer isso varia de analisador para analisador e de acordo com as opções especificadas. Todos os analisadores suportam o modo RootBitStream, no qual o algoritmo de criação da árvore é igual ao utilizado por um nó de entrada.
Alguns analisadores também suportam um segundo modo, FolderBitStream, que gera uma sub-árvore a partir de um fluxo de bits criados pela função ASBITSTREAM (consulte função ASBITSTREAM) utilizando esse modo.
Quando a instrução for processada, quaisquer expressões da cláusula PARSE serão avaliadas. Será emitida uma exceção se qualquer uma das seguintes expressões não resultar em um valor não nulo do tipo apropriado:
Cláusula | Type | Valor Padrão |
---|---|---|
Opções | integer | RootBitStream & ValidateNone |
Codificação | integer | 0 |
Ccsid | integer | 0 |
Conjunto de Mensagens | caractere | Cadeia de comprimento zero |
Tipo de Mensagem | caractere | Cadeia de comprimento zero |
Formato de Mensagem | caractere | Cadeia de comprimento zero |
Embora a cláusula OPTIONS aceite qualquer expressão que retorna um valor de tipo inteiro, ela apenas é significativa para gerar valores de opções da lista de constantes fornecidas, utilizando a função BITOR se mais de uma opção for requerida.
Parser mode options... FolderBitStream RootBitStream Validate master options... ValidateValue -- Pode ser utilizado com ValidateContent ValidateContent -- Pode ser utilizado com ValidateValue ValidateNone Validate failure action options... ValidateException ValidateLocalError ValidateUserTrace Validate timing options... ValidateComplete ValidateImmediate ValidateDeferred Validate value constraints options... ValidateFullConstraints ValidateBasicConstraints Validate fix up options... ValidateFullFixUp ValidateNoFixUp
Você pode especificar apenas uma opção de cada grupo, com exceção de ValidateValue e ValidateContent que podem ser utilizadas em conjunto para obter a validação do conteúdo e do valor. Se você não especificar uma opção em um grupo, a opção em negrito será utilizada.
MQENC_INTEGER_NORMAL MQENC_INTEGER_REVERSED MQENC_DECIMAL_NORMAL MQENC_DECIMAL_REVERSED MQENC_FLOAT_IEEE_NORMAL MQENC_FLOAT_IEEE_REVERSED MQENC_FLOAT_S390
Os valores utilizados para a cláusula CCSID seguem o sistema de numeração normal. Por exemplo, 1200 = UCS-2, 1208 = UTF-8.
Para cláusulas ausentes, são utilizados os valores padrão especificados. É recomendável utilizar o CCSID e os valores padrão de codificação porque eles utilizam seus valores a partir da codificação e das definições de CCSID do gerenciador de filas.
Da mesma forma, utilizar os valores padrão para cada uma das opções de conjunto de mensagens, tipo e formato é útil, pois muitos analisadores não requerem informações sobre conjunto de mensagens, tipo ou formato, portanto, qualquer valor válido é suficiente.
ENCODING -> CCSID -> SET -> TYPE -> FORMAT -> OPTIONS
A lista pode ser truncada em qualquer ponto e uma expressão totalmente vazia pode ser utilizada para quaisquer cláusulas nas quais você não fornece um valor.
CREATE FIELD OutputRoot.XML.Data;O exemplo a seguir cria um campo sem nome, tipo ou valor como o primeiro filho de ref1:
CREATE FIRSTCHILD OF ref1;O exemplo a seguir cria um campo utilizando o tipo, nome e valor especificados:
CREATE NEXTSIBLING OF ref1 TYPE NameValue NAME 'Price' VALUE 92.3;O exemplo a seguir cria um campo com um tipo e nome, mas sem valor; o campo será incluído antes do irmão indicador pela referência dinâmica (ref1):
CREATE PREVIOUSSIBLING OF ref1 TYPE Name NAME 'Quantity';
CREATE FIRSTCHILD OF targetCursor AS targetCursor NAME 'Component';O exemplo a seguir cria um novo campo como o irmão à direita do campo apontado pela variável de referência targetCursor tendo o mesmo tipo e nome que esse campo. A instrução então move targetCursor para apontar o novo campo:
CREATE NEXTSIBLING OF targetCursor AS targetCursor REPEAT;
O exemplo a seguir mostra como utilizar a cláusula PARSE:
DECLARE bodyBlob BLOB; SET bodyBlob = BITSTREAM( InputRoot.XML ); DECLARE creationPtr REFERENCE TO OutputRoot.XML; CREATE FIRSTCHILD OF creationPtr PARSE(bodyBlob,InputProperties.Encoding,437) ;
Este exemplo fornece o ESQL e uma mensagem de entrada de amostra, que produzem a mensagem de saída no final deste exemplo.
ESQL: /* copy headers */ DECLARE i INTEGER; DECLARE numHeaders INT; SET i = 1; SET numHeaders = CARDINALITY(InputRoot.*[]); WHILE i < numHeaders DO SET OutputRoot.*[i] = InputRoot.*[i]; SET i = i + 1; END WHILE; CREATE FIELD OutputRoot.XML.TestCase.description TYPE NameValue VALUE 'This is my TestCase' ; CREATE FIRSTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Identifier' VALUE InputRoot.XML.TestCase.Identifier; CREATE LASTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Sport' VALUE InputRoot.XML.TestCase.Sport; CREATE LASTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Date' VALUE InputRoot.XML.TestCase.Date; CREATE LASTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Type' VALUE InputRoot.XML.TestCase.Type; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Number TYPE NameValue VALUE 'Premiership'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[1].Number TYPE NameValue VALUE '1' ; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[1].Home TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Home NAME 'Team' VALUE 'Liverpool' ; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Home NAME 'Score' VALUE '4'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[1].Away TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Away NAME 'Team' VALUE 'Everton';
CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Away NAME 'Score' VALUE '0'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[2].Number TYPE NameValue VALUE '2'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[2].Home TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Home NAME 'Team' VALUE 'Manchester United'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Home NAME 'Score' VALUE '2'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[2].Away TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Away NAME 'Team' VALUE 'Arsenal'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Away NAME 'Score' VALUE '3'; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Number TYPE NameValue VALUE '2'; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Result[1].Number TYPE NameValue VALUE '1'; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Result[1].Home TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Home NAME 'Team' VALUE 'Port Vale'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Home NAME 'Score' VALUE '9' ; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Result[1].Away TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Away NAME 'Team' VALUE 'Brentford'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Away NAME 'Score' VALUE '5';
Input Message: <TestCase description="This is my TestCase"> <Identifier>ES03B305_T1</Identifier> <Sport>Football</Sport> <Date>01/02/2000</Date> <Type>LEAGUE</Type> </TestCase> Mensagem de Saída: <TestCase description="This is my TestCase"> <Identifier>ES03B305_T1</Identifier> <Sport>Football</Sport> <Date>01/02/2000</Date> <Type>LEAGUE</Type> <Division Number="Premiership"> <Result Number="1"> <Home> <Team>Liverpool</Team> <Score>4</Score> </Home> <Away> <Team>Everton</Team> <Score>0</Score> </Away> </Result> <Result Number="2"> <Home> <Team>Manchester United</Team> <Score>2</Score> </Home> <Away> <Team>Arsenal</Team> <Score>3</Score> </Away> </Result> </Division> <Division Number="2"> <Result Number="1"> <Home> <Team>Port Vale</Team> <Score>9</Score> </Home> <Away> <Team>Brentford</Team> <Score>5</Score> </Away> </Result> <Result Number="2"> <Home> <Team>Reading</Team> <Score>6</Score> </Home> <Away> <Team>Stoke City</Team> <Score>7</Score> </Away> </Result> </Division> </TestCase>
Conceitos relacionados
ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Trabalhando com Mensagens e Fluxos de Bits XML
Referências relacionadas
Preferência de Sintaxe
instruções ESQL
função ASBITSTREAM
Avisos |
Marcas |
Downloads |
Biblioteca |
Suporte |
Feedback
![]() ![]() |
ak04950_ |