Wednesday 8 November 2017

Oracle Sys Xmltype Storage Binary Options


Estou usando a coluna XMLType em algumas das minhas tabela de banco de dados oracle. Anteriormente (em 11.2.0.2) o tipo de armazenamento padrão considerado é CLOB. Então, se você emitir uma consulta para as colunas XMLType, eu posso ver o conteúdo da coluna como seqüência de caracteres XML. Mas quando eu largar e recriar todas as tabelas e inserido alguns dados, eu não poderia obter o conteúdo das colunas XMLType. É simples exibir o XMLType no valor cloumn. Eu tenho uma dúvida que se o tipo de armazenamento é chaged em XML BINARY Então eu emitir a seguinte declaração alter: Observe que já existem alguns dados presentes na tabela. Evento após quando eu excluir e inserir uma linha, o conteúdo está mostrando como XMLType. Estou usando o SQL Developer UI ferramenta. Alguém pode sugerir uma maneira de corrigir esse problema Ok, Agora decidimos que vamos armazenar o conteúdo da coluna XMLType como SECURE FILE BINARY XML. Então temos uma tabela como esta: A coluna XMLType é exibida como SYS. XMLType no desenvolvedor sql. Então, como para obter o conteúdo do XML binário SELECIONE x. ID, x. Vid, x. details. getCLOBVal () FROM XMYTYPETESTx onde x. ID100000 O acima consulta funciona para mim documentação finally. The Oracle alega que ele armazena XMLType mais Compacto como BINARY XML do que como CLOB. Mas como faço para descobrir quanto espaço é tomado pelo xml binário Então, vsize parece ser o tamanho de algum tipo de ponteiro ou localizador LOB, e getclobval desembala o XML binário em texto. Mas o que acontece com o tamanho de armazenamento do XML binário Por favor, ajude, o tamanho da tabela é de 340GB, por isso vale a pena olhar em opções de armazenamento. Perguntou Jul 15 14 at 17:41 Bem, um segmento não tem nada a ver com uma linha como tal. Um segmento é uma tabela, uma partição de tabela, um índice, um LOB. O importante é armazenar mais de 4k dentro dele, de modo que seu lob não será armazenado na linha que significa dentro do bloco de banco de dados real da linha em si, mas é armazenado em um segmento LOB de linha quotout. Ndash gvenzl Jul 22 14 at 13:00 problema de representante, não é permitido postar comentários que você queria dizer entre as perguntas como eu entendi. A única semelhança é questão de espaço de armazenamento, pensei que poderia ser útil para estimar estimativa. Você não mencionou que tipo de dados você vai armazenar como bXML. Descompacta o XML binário em texto Se XML puro, em seguida, depende do compressor que você vai usar. Geralmente lzmagzip é usado para compressão binária. Talvez eu esteja escrevendo sobre coisas óbvias, mas isso é tudo o que seiBinary XML Data Storage em 11g Oracle 11g Novos recursos Dicas Nas versões anteriores do Oracle, duas opções de armazenamento Extensible Markup Language (XML) estavam disponíveis: unstructured, CLOB e storage and Estruturado ou baseado em esquema. No Oracle 11g, XML binário foi adicionado como uma nova opção de armazenamento. Armazenamento não estruturado trata um documento XML como um objeto grande e armazena o arquivo no banco de dados sem estar ciente do conteúdo. Esta opção tem o melhor desempenho de inserção e exclusão, mas o pior acesso e consumo relacional de espaço em disco. O armazenamento estruturado requer o registro prévio do esquema XML e insere um documento XML em uma estrutura objeto-relacional. Esta opção de armazenamento tem o melhor desempenho de consulta e consumo de espaço em disco, mas o maior custo durante a inserção inicial. Esse alto custo é causado porque durante a inserção, o documento é desfiado e armazenado em objetos de banco de dados criados durante o registro do esquema XML. O XML binário, a nova opção de armazenamento introduzida em 11g, armazena o documento em um formato binário pós-parse projetado especificamente para XML. Esta opção provavelmente será a melhor escolha para a maioria dos requisitos XML. O armazenamento binário adicional oferece um desempenho de inserção comparável ao armazenamento não estruturado, mas ao desempenho de consulta e espaço em disco que é comparável ao armazenamento estruturado. Ao contrário do armazenamento estruturado, os benefícios do XML binário não dependem do registro do esquema. Isso se deve à opção de registrar um esquema XML binário para ter tabelas XML binárias baseadas em esquema. No entanto, uma limitação permanece no sentido de que um esquema XML registrado não pode ser compartilhado entre um XML binário e uma tabela relacional de objetos. A melhor estratégia ao escolher como gerenciar conteúdo XML é tentar primeiro a opção de armazenamento binário e avaliar se o desempenho é aceitável. Se o desempenho de acesso relacional não for aceitável, experimente a opção de armazenamento estruturado. A razão pela qual o armazenamento binário é preferido é que é fácil de usar e requer a menor quantidade de manutenção porque o registro do esquema não é necessário. As colunas do tipo XML binário também são mais fáceis de usar em tabelas que não sejam XMLType, pois o desempenho não depende da criação de índices. Para usar o armazenamento binário, a tabela XML deve ser criado com a seguinte sintaxe: SQLgt CREATE TABLE BINARYXMLTABLE DE LOJA XmlType XMLType AS XML BINÁRIO 2 / Considere o seguinte documento XML para transações de pedidos: ltxml versionquot1.0quotgt ltordergt ltcustomergt ltnamegtCustomer ABClt / namegt ltccNumgt1234123412341234lt / ccNumgt lt / customergt ltorderLinesgt ltitemgt ltitemidgt108lt / itemidgt ltitemnamegtORACLE 11G NOVOS RECURSOS DO LIVRO ED1.0lt / itemnamegt ltquantitygt1lt / quantitygt ltunitPricegt38.00lt / unitPricegt lt / itemgt ltitemgt ltitemidgt109lt / itemidgt ltitemnamegtORACLE TUNING GUIA ED1.0lt / itemnamegt ltquantitygt1lt / quantitygt ltunitPricegt22.00lt / unitPricegt lt / itemgt lt / orderLinesgt ltreceiptgt ltsubtotalgt60.00lt / subtotalgt ltsalesTaxgt4.80lt / salesTaxgt lttotalgt64.80lt / totalgt lt / receiptgt lt / ordergt Insira este documento na tabela XML binário usando a seguinte sintaxe: SQLgt inserir valores BINARYXMLTABLE (XmlType (BFILENAME (XMLDIR, testdocument. xml), nlscharsetid (AL32UTF8))) Após a inserção, o documento está imediatamente disponível para acesso relacional. SELECIONE extractValue (valor (b), / fim / cliente / nome) CustomerName, extractValue (valor (d), / produto / itemid) ItemId, extractValue (valor (d), / produto / quantidade) quantidade, extractValue (valor (d ), / produto / UnitPrice PreçoUnitário), extractValue (valor (b), / fim / recibo / subtotal) subtotal, extractValue (valor (b), / fim / recibo / salesTax) salesTax, extractValue (valor (b), / fim / recibo /) Total Total de BINARYXMLTABLE um, mesa (XMLSequence (Extract (objectvalue, / fim))) b, mesa (XMLSequence (Extract (valor (b), / ordem / OrderLines))) c, mesa (XMLSequence (Extract (Valor (c), / orderLines / item))) d CUSTOMERNAME ITEMID QUANTIDADE UNITPRICE SUBTOTAL SALESTAX TOTAL -------------- ------- -------- ---------- -------- -------- ------ Cliente ABC 108 1 38,00 60,00 4,80 64,80 Cliente ABC 109 1 22,00 60,00 4,80 64,80 Conforme demonstrado Acima, a sintaxe para o acesso relacional a uma tabela XML binária não é alterada a partir de outras opções de armazenamento. Este é um trecho do novo livro Oracle 11g New Features. Guia de especialistas para as novas características importantes por John Garmany, Steve Karam, Lutz Hartmann, V. J. Jain, Brian Carr. Você pode comprá-lo direto do editor por 30 off. Burleson é a equipe americana Nota: Esta documentação da Oracle foi criada como um suporte e referência de treinamento Oracle para uso por nossos profissionais de consultoria de ajuste de desempenho DBA. Sinta-se livre para fazer perguntas no nosso fórum Oracle. Verificar experiência Qualquer pessoa que considere usar os serviços de um especialista em suporte da Oracle deve investigar de forma independente suas credenciais e experiência e não confiar em propagandas e experiência auto-proclamada. Todos os especialistas legítimos da Oracle publicam suas qualificações da Oracle. Errata A tecnologia Oracle está mudando e nós nos esforçamos para atualizar nossas informações de suporte do BC Oracle. Se você encontrar um erro ou tiver uma sugestão para melhorar nosso conteúdo, gostaríamos de receber seu feedback. Apenas e-mail: e inclua o URL da página. O Oráculo de Apoio Base de dados de cópia de Copyright 1996 - 2016 Todos os direitos reservados pela Burleson a Oracle reg é a marca registrada da Oracle Corporation.4 Usando XMLType Este capítulo descreve como usar o tipo de dados XMLType, criar e manipular tabelas XmlType e colunas e consulta sobre eles . Ele contém as seguintes seções: Nota: Não baseado em esquema: As tabelas e colunas XMLType descritas neste capítulo não são baseadas no esquema XML. No entanto, você pode usar as técnicas e os exemplos fornecidos neste capítulo, independentemente da opção de armazenamento escolhida para suas tabelas e colunas XMLType. Consulte o Capítulo 3, Utilizando o Oracle XML DB para obter mais recomendações de armazenamento. Baseado em esquema XML: Apêndice B, Esquema de esquema XML e Capítulo 5, Mapeamento estruturado de XMLType descrevem como trabalhar com tabelas e colunas XMLType baseadas em esquema XML. O que é XMLType O Oracle9 i Release 1 (9.0.1) introduziu um novo tipo de dados, XMLType. Para facilitar a manipulação nativa de dados XML no banco de dados. O seguinte resume XMLType: XMLType pode ser usado em procedimentos armazenados PL / SQL como parâmetros, valores de retorno e variáveis. XMLType pode representar um documento XML como uma instância (de XMLType) em SQL. XMLType possui funções de membro incorporadas que operam em conteúdo XML. Por exemplo, você pode usar funções XMLType para criar, extrair e indexar dados XML armazenados no banco de dados Oracle9 i. A funcionalidade também está disponível através de um conjunto de APIs (Application Program Interfaces) fornecidas em PL / SQL e Java. Com o XMLType e essas capacidades, os desenvolvedores SQL podem aproveitar o poder do banco de dados relacional enquanto trabalham no contexto do XML. Da mesma forma, os desenvolvedores XML podem aproveitar o poder dos padrões XML enquanto trabalham no contexto de um banco de dados relacional. Tipo de dados XMLType pode ser usado como o tipo de dados de colunas em tabelas e modos de exibição. Variáveis ​​de XMLType podem ser usadas em procedimentos armazenados PL / SQL como parâmetros, valores de retorno e assim por diante. Você também pode usar XMLType em SQL, PL / SQL e Java (através de JDBC). No Oracle9 i Release 1 (9.0.1), XMLType foi suportado somente no servidor em SQL, PL / SQL e Java. No Oracle9 i Release 2 (9.2), XMLType também é suportado no lado do cliente através de SQL, Java e protocolos como FTP e HTTP / WebDav. São fornecidas várias funções úteis que operam em conteúdo XML. Muitos destes são fornecidos como SQL e membro funções de XMLType. Por exemplo, a função extract () extrai um nó específico (s) de uma instância XMLType. Você pode usar XMLType em consultas SQL da mesma forma que quaisquer outros tipos de dados definidos pelo usuário no sistema. Benefícios do tipo de dados XMLType e da API O tipo de dados XMLType e API fornece vantagens significativas. Ele permite operações SQL em conteúdo XML, bem como operações XML em conteúdo SQL: Versatile API. XMLType tem uma API versátil para desenvolvimento de aplicativos, pois inclui funções internas, suporte a indexação, navegação e assim por diante. XMLType e SQL. Você pode usar XMLType em instruções SQL combinadas com outras colunas e tipos de dados. Por exemplo, você pode consultar colunas XMLType e juntar o resultado da extração com uma coluna relacional e, em seguida, o Oracle pode determinar uma maneira ideal para executar essas consultas. Avaliação otimizada usando XMLType. O XMLType é otimizado para não materializar os dados XML em uma estrutura em árvore, a menos que seja necessário. Portanto, quando o SQL seleciona instâncias XMLType dentro de consultas, apenas um formulário serializado é trocado entre limites de função. Estes são explodidos em formato de árvore somente quando operações como extract () e e xistsNode () são executadas. A estrutura interna de XMLType também é uma estrutura de árvore otimizada DOM-como. Indexação. O índice Oracle Text foi aprimorado para suportar colunas XMLType. Você também pode criar índices baseados em função nas funções existsNode () e extract () para acelerar a avaliação da consulta. Quando usar XMLType Use XMLType quando você precisar executar o seguinte: Consultas SQL em parte ou em todo o documento XML: As funções existsNode () e extract () fornecem as funções de consulta SQL necessárias sobre documentos XML. Forte datilografia dentro de instruções SQL e funções PL / SQL: A digitação forte implica que você garante que os valores passados ​​sejam valores XML e não qualquer string de texto arbitrária. Funcionalidade XPath fornecida pelas funções extract () e existsNode (): Note que XMLType usa o analisador e processador C XML incorporado e, portanto, fornece melhor desempenho e escalabilidade quando usado dentro do servidor. Indexação em pesquisas XPath em documentos: XMLType tem funções membro que você pode usar para criar índices baseados em função para otimizar pesquisas. Para proteger aplicações de modelos de armazenamento. O uso de XMLType em vez de CLOBs ou armazenamento relacional permite que os aplicativos migrem graciosamente para várias alternativas de armazenamento mais tarde sem afetar nenhuma das instruções de consulta ou DML no aplicativo. Preparar para futuras otimizações. A nova funcionalidade XML suportará XMLType. Uma vez que o banco de dados Oracle9 i é nativamente ciente de que XMLType pode armazenar dados XML, podem-se fazer otimizações e técnicas de indexação melhores. Ao escrever aplicativos para usar XMLType. Essas otimizações e aprimoramentos podem ser facilmente alcançados e preservados em versões futuras sem a necessidade de reescrever aplicativos. Armazenamento de dados XMLType na base de dados XML XML Os dados XMLType podem ser armazenados de duas maneiras ou uma combinação dos mesmos: Em objetos grandes (LOBs). LOB armazenamento mantém a precisão de conteúdo para o original XML (whitespaces e tudo). Aqui os documentos XML são armazenados como documentos completos como arquivos. Nesta versão, para armazenamento não baseado em esquema, XMLType oferece uma opção de armazenamento CLOB. Em versões futuras, o Oracle pode fornecer outras opções de armazenamento, como BLOBs, NCLOBS e assim por diante. Você também pode criar um armazenamento baseado em CLOB para armazenamento baseado em esquema XML. Quando você cria uma coluna XMLType sem qualquer especificação de esquema XML, uma coluna CLOB oculta é criada automaticamente para armazenar os dados XML. A coluna XMLType se torna uma coluna virtual sobre essa coluna CLOB oculta. Não é possível acessar diretamente a coluna CLOB no entanto, você pode definir as características de armazenamento para a coluna usando a cláusula de armazenamento XMLType. Em armazenamento estruturado (em tabelas e vistas). O armazenamento estruturado mantém a fidelidade DOM (Document Object Model). Aqui, os documentos XML são divididos (decompostos) em tabelas ou visões objeto-relacionais. XMLType alcança a fidelidade de DOM mantendo informações que objetos SQL ou Java normalmente não fornecem, como: Ordenação de elementos e atributos filho. Distinguir entre elementos e atributos. Conteúdo não estruturado declarado no esquema. Por exemplo, contentmixed ou ltanygt declarações. Dados não declarados em documentos de instância, como instruções de processamento, comentários e declarações de namespace. Suporte para tipos de dados XML básicos não disponíveis no SQL (Boolean, QName e assim por diante). Suporte para restrições XML (facetas) não suportadas diretamente pelo SQL, como listas enumeradas. Instâncias XMLType nativas contêm colunas ocultas que armazenam essas informações extras que não se encaixam perfeitamente no modelo de objeto SQL. Essas informações podem ser acessadas através de APIs em SQL ou Java, usando funções membro, como extractNode (). Alterar o armazenamento XMLType do armazenamento estruturado para LOB, ou vice-versa, é possível usando importação e exportação de banco de dados. O código do aplicativo não precisa ser alterado. Em seguida, você pode alterar opções de armazenamento XML ao ajustar seu aplicativo, uma vez que cada opção de armazenamento tem seus próprios benefícios. Prós e Contras das Opções de Armazenamento XML no Oracle XML DB A Tabela 4-1 resume algumas vantagens e desvantagens a serem consideradas ao selecionar a opção de armazenamento do Oracle XML DB. Tabela 4-1 Opções de Armazenamento XML no Oracle XML DB Exemplo 4-12 Especificando Restrições em Colunas XMLType impede inserções como: Exemplo 4-13 Usando ALTER TABLE para Alterar NOT NULL de Colunas XMLType Você também pode usar a instrução ALTER TABLE para alterar NOT NULL informações de uma coluna XMLType, da mesma forma que você faria para outros tipos de coluna: Você também pode definir restrições de verificação em colunas XMLType. Outros valores padrão não são suportados neste tipo de dados. Manipulação de dados XML em colunas / tabelas XMLType Uma vez que XMLType é um tipo de dados definido pelo usuário com funções definidas nele, você pode chamar funções em XMLType e obter resultados. Você pode usar XMLType onde quer que você use um tipo definido pelo usuário, incluindo para colunas de tabela, exibições, corpos de acionador e definições de tipo. Você pode executar as seguintes manipulações ou DML (Data Manipulation Language) em dados XML em colunas e tabelas XMLType: Inserindo dados XML em colunas / tabelas XMLType Você pode inserir dados em colunas XMLType das seguintes maneiras: Colunas XMLType só podem armazenar dados bem formados Documentos XML. Fragmentos e outros XML não-bem-formados não podem ser armazenados em colunas XMLType. Usando instruções INSERT Para usar a instrução INSERT para inserir dados XML em XMLType. Você precisa primeiro criar documentos XML para executar a inserção com. Você pode criar os documentos XML inseríveis da seguinte maneira: Usando construtores XMLType. Isso pode ser feito em SQL, PL / SQL e Java. Usando funções SQL como XMLElement (). XMLConcat (). E XMLAGG (). Isso pode ser feito em SQL, PL / SQL e Java. Exemplo 4-14 Inserindo Dados XML Usando createXML () com CLOB Os exemplos a seguir usam INSERT. SELECT eo construtor XMLType para primeiro criar um documento XML e, em seguida, inserir o documento nas colunas XMLType. Considere tabela poclobtab que contém um CLOB, poClob. Para armazenar um documento XML: Exemplo 4-15 Inserir dados XML usando uma instância XMLType Você pode inserir um documento XML de ordem de compra na tabela, poxmltab. Simplesmente criando uma instância XML a partir dos dados CLOB armazenados no outro poclobtab: Você também pode obter o valor CLOB de qualquer expressão, incluindo funções que podem criar CLOBs temporários ou selecionar CLOBs de outras tabelas ou visualizações. Exemplo 4-16 Inserindo dados XML usando XMLType () com String Este exemplo insere uma ordem de compra na tabela potab usando o construtor XMLType: Exemplo 4-17 Inserindo dados XML usando XMLElement () Este exemplo insere uma ordem de compra na tabela poxmltab gerando-a Usando a função XMLElement () SQL. Suponha que a ordem de compra seja uma exibição de objeto que contenha um objeto de ordem de compra. A definição completa do modo de pedido é dada em DBMSXMLGEN: Gerando uma ordem de compra a partir do banco de dados no formato XML. XMLElement () cria um XMLType a partir do objeto de ordem de compra, que é inserido na tabela poxmltab. Você também pode usar SYSXMLGEN () na instrução INSERT. Selecionando e Pesquisando Dados XML Você pode consultar dados XML de colunas XMLType das seguintes maneiras: Selecionando colunas XMLType através de SQL, PL / SQL ou Java Consultando colunas XMLType diretamente e usando extract () e existsNode () Para consultar o conteúdo XML. Consulte Indexação de colunas XMLType e Capítulo 7, Pesquisando dados XML com o Oracle Text. Funções SQL para Manipular Dados XML Funções SQL como existsNode (). extrair(). XMLTransform (). E updateXML () operam em dados XML dentro do SQL. O tipo de dados XMLType suporta a maioria delas como funções de membro. Você pode usar o estilo egoísta de invocação ou as funções SQL. Selecionando dados XML Você pode selecionar dados XMLType usando PL / SQL ou Java. Você também pode usar o getClobVal (), getStringVal (). Ou getNumberVal () para recuperar XML como um CLOB, VARCHAR ou NUMBER, respectivamente. Exemplo 4-18 Seleção de colunas XMLType usando getClobVal () Este exemplo mostra como selecionar uma coluna XMLType usando o SQLPlus: Consultando dados XML Você pode consultar dados XMLType e extrair partes dele usando as funções existsNode () e extract (). Ambas estas funções usam um subconjunto da recomendação XPath do W3C para navegar no documento. Usando expressões XPath para pesquisar documentos XML XPath é uma recomendação do W3C para navegar em documentos XML. O XPath modela o documento XML como uma árvore de nós. Ele fornece um rico conjunto de operações para caminhar na árvore e para aplicar predicados e funções de teste de nó. Aplicar uma expressão XPath a um documento XML pode resultar em um conjunto de nós. Por exemplo, / PO / PONO seleciona todos os elementos filho PONO sob o elemento raiz PO do documento. A Tabela 4-2 lista algumas construções comuns usadas no XPath. Tabela 4-2 Algumas Construções XPath Comuns Consultando Dados XML Usando Funções de Membro XMLType Você pode selecionar dados XMLType através de PL / SQL, OCI ou Java. Você também pode usar o método getClobVal (). GetStringVal (). Ou getNumberVal () para recuperar o XML como um CLOB, VARCHAR ou um número, respectivamente. Exemplo 4-19 Recuperando um documento XML como um CLOB Usando getClobVal () e existsNode () Este exemplo mostra como selecionar uma coluna XMLType usando getClobVal () e existsNode (): existsNode Função A sintaxe para a função existsNode () é descrita em Figura 4-2 e também como segue: Figura 4-2 Sintaxe existeNode () Descrição do texto da ilustração Existe a função existsNode () no XMLType verifica se a avaliação dada XPath resulta em pelo menos um único elemento XML ou nó de texto. Se assim for, ele retorna o valor numérico 1, caso contrário, ele retorna um 0. Namespace pode ser usado para identificar o mapeamento de prefixo (es) especificado no XPathstring para o (s) namespace (s) correspondente (s). Exemplo 4-20 Uso de existsNode () em XMLType Por exemplo, considere um documento XML como: Uma expressão XPath como / PO / PNAME resulta em um único nó. Portanto, existsNode () retornará 1 para esse XPath. Isto é o mesmo com / PO / PNAME / text (). Que resulta em um único nó de texto. Uma expressão XPath como / PO / POTYPE não retorna nenhum nós. Portanto, um existsNode () sobre isso retornaria o valor 0. Para resumir, a função de membro existsNode () pode ser usada em consultas e criar índices baseados em função para acelerar a avaliação de consultas. Exemplo 4-21 Usando o existsNode () para encontrar um nó O exemplo a seguir testa a existência do nó / Warehouse / Dock na coluna warehousespec caminho XML da tabela de amostra oe. warehouses: Usando Índices para Avaliar existsNode () Você pode criar Baseados em função usando existsNode () para acelerar a execução. Você também pode criar um índice CTXXPATH para ajudar a acelerar a pesquisa XPath arbitrária. Função extract () A função extract () é similar à função e xistsNode (). Ele aplica uma seqüência XPath VARCHAR2 com um parâmetro de namespace opcional e retorna uma instância XMLType que contém um fragmento XML. A sintaxe é descrita na Figura 4-3 e como segue: Figura 4-3 extração () Sintaxe Descrição de texto da ilustração extractxml. gif extract () em XMLType extrai o nó ou um conjunto de nós do documento identificado pela expressão XPath . Os nós extraídos podem ser elementos, atributos ou nós de texto. Quando extraídos, todos os nós de texto são recolhidos em um único valor de nó de texto. Namespace pode ser usado para fornecer informações de namespace para prefixos na seqüência XPath. O XMLType resultante da aplicação de um XPath através de extract () não precisa ser um documento XML bem formado, mas pode conter um conjunto de nós ou dados escalares simples em alguns casos. Você pode usar os métodos getStringVal () ou getNumberVal () em XMLType para extrair esses dados escalares. Por exemplo, a expressão XPath / PO / PNAME identifica o elemento PNAME dentro do documento XML mostrado anteriormente. A expressão / PO / PNAME / text (). Por outro lado, refere-se ao nó de texto do elemento PNAME. O último ainda é considerado um XMLType. Em outras palavras, extrair (poDoc, / PO / PNAME / text ()) ainda retorna uma instância de XMLtype, embora a instância possa realmente conter apenas texto. Você pode usar getStringVal () para obter o valor de texto como um resultado VARCHAR2. Use a função de teste de nó de texto () para identificar nós de texto em elementos antes de usar o método getStringVal () ou getNumberVal () para convertê-los em dados SQL. Não ter o nó text () produziria um fragmento XML. Por exemplo, expressões XPath: / PO / PNAME identifica o fragmento ltPNAMEgtPO1lt / PNAMEgt / PO / PNAME / text () identifica o valor de texto PO1 Você pode usar o mecanismo de índice para identificar elementos individuais no caso de elementos repetidos em um documento XML. Por exemplo, se você tiver um documento XML como: // PONO1 para identificar o primeiro elemento PONO (com valor 100). // PONO2 para identificar o segundo elemento PONO (com valor 200). O resultado de extract () é sempre um XMLType. Se aplicar o XPath produz um conjunto vazio, em seguida, extract () retorna um valor NULL. Assim, a função de membro extract () pode ser usada de várias maneiras, incluindo o seguinte: Extraindo valores numéricos nos quais os índices baseados em função podem ser criados para acelerar o processamento Extraindo expressões de coleção a serem usadas na cláusula FROM de instruções SQL Extraindo Fragmentos a serem posteriormente agregados para produzir documentos diferentes Exemplo 4-22 Usando extract () para extrair o valor de um nó Este exemplo extrai o valor de node, / Warehouse / Docks. De coluna, warehousespec na tabela oe. warehouses: função extractValue () A função extractValue () toma como argumentos uma instância XMLType e uma expressão XPath. Ele retorna um valor escalar correspondente ao resultado da avaliação XPath na instância XMLType. A sintaxe extractValue () também é descrita na Figura 4-4. Documentos baseados em esquema XML. Para documentos baseados no esquema XML, se o Oracle9 i pode inferir o tipo do valor de retorno, então um valor escalar do tipo apropriado é retornado. Caso contrário, o resultado é do tipo VARCHAR2. Documentos não baseados em esquemas. Para documentos não baseados em esquemas XML, o tipo de retorno é sempre VARCHAR2. ExtractValue () tenta inferir o tipo de retorno adequado do esquema XML do documento. Se o XMLType não estiver baseado em esquema ou o tipo de retorno apropriado não puder ser determinado, o Oracle XML DB retornará um VARCHAR2. Figura 4-4 Sintaxe de extractValue () Descrição de texto da ilustração extractvalue. gif A Função de atalho extractValue () permite extrair o valor desejado mais facilmente do que usando a função de extração equivalente. É uma facilidade de uso e função de atalho. Então, em vez de usar: você pode substituir extract (). GetStringVal () ou extrair (). Getnumberval () com extractValue () da seguinte forma: Com extractValue () você pode deixar o texto (). Mas SOMENTE se o nó apontado pela parte do caminho tiver apenas um filho e esse filho for um nó de texto. Caso contrário, é emitido um erro. A sintaxe extractValue () é a mesma que extract (). ExtractoValor () Características extratoValor () tem as seguintes características: Ele sempre retorna somente conteúdo escalar, como NUMBER. VARCHAR2, e assim por diante. Ele não pode retornar nós XML ou conteúdo misto. Ele gera um erro na compilação ou tempo de execução se ele obtém nós XML como resultado. Ele sempre retorna VARCHAR2 por padrão. Se o valor dos nós for maior do que 4K, ocorrerá um erro de tempo de execução. Na presença de informações de esquema XML, em tempo de compilação, extractValue () pode retornar automaticamente o tipo de dados apropriado com base nas informações do esquema XML, se ele pode detectá-lo em tempo de compilação da consulta. Por exemplo, se as informações de esquema XML para o caminho / PO / POID indicam que este é um valor numérico, então extractValue () retorna um NUMBER. Se o XPath identifica um nó, ele automaticamente obtém o conteúdo escalar de seu filho de texto. O nó deve ter exatamente um filho de texto. Por exemplo: extrai o texto filho do PNAME. Isso é equivalente a: Exemplo 4-23 Extraindo o Valor Escalar de um Fragmento XML Usando extractValue () O exemplo a seguir toma como entrada os mesmos argumentos que o exemplo para extract () Function. Em vez de retornar um fragmento XML, como extract () faz, ele retorna o valor escalar do fragmento XML: ExtractValue () extraiu automaticamente o texto filho do elemento Docks e retornou esse valor. Você também pode escrever isso usando extract () da seguinte maneira: Mais exemplos SQL que consulta XML Os exemplos SQL a seguir ilustram maneiras que você pode consultar XML. Exemplo 4-24 Consultando XMLType Usando extract () e existsNode () Suponha que a tabela poxmltab, que contém a identificação da ordem de compra e as colunas XML de ordem de compra, assume que os seguintes valores são inseridos na tabela: Agora você pode extrair a tabela numérica Valores para os números de ordem de compra usando extract (): Aqui extract () extrai o conteúdo de tag, número de ordem de compra, PONO. ExistsNode () encontra nós onde PONO existe como um filho de PO. Aqui a função text () é usada somente para retornar os nós de texto. GetNumberVal () pode converter apenas valores de texto em quantia numérica. WHTO: Partition XML Binário, XMLType Armazenamento Apenas para começar a série 11gR2, aqui o primeiro 8220HOWTO8221 pequeno post sobre os novos recursos no Oracle 11gR2. O banco de dados 11gR2 suporta agora 3 opções binárias de particionamento XML. O particionamento tem grandes vantagens, se você estiver lidando com enormes volumes de dados XML. Essas vantagens são principalmente sobre a manutenção, por exemplo atualizar / atualizar dados, ou o índice de particionamento local que pertence à partição específica que você deseja alterar. Você pode usar esta forma de particionamento em XMLType Columns e XMLType Tables, XML Schema based ou Schema-less. XML XML binário deve ser usado, na maioria das vezes, se você estiver lidando com ambientes de conteúdo / dados orientados (baseado em XML Schema) ou documento orientado (se XML Schema menos). As seguintes 3 opções estão agora disponíveis: XML Partitioning é baseado em uma coluna ou uma coluna virtual e é definido através da função / sintaxe XMLTABLE. Você tem permissão para transmitir um conjunto de resultados / fragmento XML para a próxima sintaxe XMLTABLE aninhada, mas apenas uma vez. Consulte os Guias de Desenvolvedores XMLDB do Oracle para obter mais informações. Particionamento de intervalo O seguinte é um exemplo de uma tabela armazenada XMLType Column (baseada em XML binário), onde uma coluna é definida que será usada para particionar a tabela. Uma coluna virtual também pode ser usada para isso, mas esteja ciente de que ele deve ser indexado se você quiser evitar problemas de desempenho. List Partitioning a) Você deve usar XMLEXISTS e XMLCAST para definir suas colunas virtuais nesta versão do banco de dados 11.2 b) Você deve apoiar estas colunas virtuais através de um índice XMLIndex ou B-Tree estruturado para torná-lo sensato razoável

No comments:

Post a Comment