Sunday, 23 July 2017

Db2 Média Móvel


Tipos de dados Cada valor manipulado pelo banco de dados Oracle possui um tipo de dados. O tipo de dados de um valor associa um conjunto fixo de propriedades com o valor. Essas propriedades fazem com que o Oracle trate valores de um tipo de dados de forma diferente dos valores de outro. Por exemplo, você pode adicionar valores de tipo de dados NUMBER, mas não valores do tipo de dados RAW. Quando você cria uma tabela ou cluster, você deve especificar um tipo de dados para cada uma de suas colunas. Quando você cria um procedimento ou função armazenada, você deve especificar um tipo de dados para cada um de seus argumentos. Esses tipos de dados definem o domínio dos valores que cada coluna pode conter ou cada argumento pode ter. Por exemplo, as colunas DATE não podem aceitar o valor 29 de fevereiro (exceto por um ano bissexto) ou os valores 2 ou SHOE. Cada valor subsequentemente colocado em uma coluna assume o tipo de dados da coluna. Por exemplo, se você inserir 01-JAN-98 em uma coluna DATA, Oracle tratará a seqüência de caracteres 01-JAN-98 como um valor DATE depois de verificar que ela se traduz em uma data válida. O banco de dados Oracle fornece uma série de tipos de dados integrados, bem como várias categorias para tipos definidos pelo usuário que podem ser usados ​​como tipos de dados. A sintaxe dos tipos de dados Oracle aparece nos diagramas que se seguem. O texto desta seção é dividido nas seguintes seções: Um tipo de dados é escalar ou não-temporal. Um tipo escalar contém um valor atômico, enquanto que um nonscalar (às vezes chamado de coleção) contém um conjunto de valores. Um objeto grande (LOB) é uma forma especial de tipo de dados escalares que representa um grande valor escalar de dados binários ou de caracteres. Os LOBs estão sujeitos a algumas restrições que não afetam outros tipos escalares devido ao tamanho deles. Essas restrições são documentadas no contexto da sintaxe SQL relevante. Os précompiladores Oracle reconhecem outros tipos de dados em programas SQL incorporados. Esses tipos de dados são chamados de tipos de dados externos e estão associados a variáveis ​​de host. Não confunda tipos de dados embutidos e tipos definidos pelo usuário com tipos de dados externos. Para obter informações sobre tipos de dados externos, incluindo como a Oracle converte entre eles e tipos de dados integrados ou tipos definidos pelo usuário, consulte o Guia de programadores do ProCOBOL. E ProCC Programmers Guide. Os tipos de dados incorporados da Oracle aparecem nas figuras que se seguem. Para obter descrições, consulte Oracle Built-in Data Types. Os tipos de dados suportados por ANSI aparecem na figura a seguir. Os tipos de dados ANSI, DB2 e SQLDS abordam o mapeamento de tipos de dados compatíveis com ANSI para tipos de dados integrados Oracle. Para descrições de tipos definidos pelo usuário, consulte Tipos Definidos pelo Usuário. Os tipos de dados fornecidos pela Oracle aparecem nas figuras que se seguem. Para descrições, consulte Tipos fornecidos pela Oracle. Para uma descrição do tipo de filtro de expressão. Consulte Tipo de filtro de expressões. Outros tipos fornecidos pela Oracle seguem: Para descrições dos tipos, consulte Todos os tipos. Para descrições dos tipos XML, consulte Tipos XML. Para descrições dos tipos espaciais, consulte Tipos espaciais. Para obter descrições dos tipos de mídia, consulte Tipos de mídia. Oracle Built-in Data Types A tabela a seguir resume os tipos de dados integrados da Oracle. Consulte a sintaxe nas seções anteriores para os elementos sintáticos. Os códigos listados para os tipos de dados são usados ​​internamente pelo Oracle Database. O código do tipo de dados de um atributo de coluna ou objeto é retornado pela função DUMP. Tabela 3-1 Resumo do tipo de dados incorporado VARCHAR2 (tamanho BYTE CHAR) Cadeia de caracteres de comprimento variável com bytes ou caracteres de tamanho máximo. O tamanho máximo é de 4000 bytes ou caracteres e o mínimo é de 1 byte ou 1 caractere. Você deve especificar o tamanho do VARCHAR2. BYTE indica que a coluna terá semântica de comprimento de byte. CHAR indica que a coluna terá semântica de personagem. Cadeia de caracteres Unicode de tamanho variável com caracteres de tamanho de tamanho máximo. O número de bytes pode ter até duas vezes o tamanho da codificação AL16UTF16 e três vezes o tamanho da codificação UTF8. O tamanho máximo é determinado pela definição do conjunto de caracteres nacionais, com um limite superior de 4000 bytes. Você deve especificar o tamanho para NVARCHAR2. Número com precisão p e escala s. A precisão p pode variar de 1 a 38. A escala s pode variar de -84 a 127. Tanto a precisão quanto a escala estão em dígitos decimais. Um valor NUMERO requer de 1 a 22 bytes. Um subtipo do tipo de dados NUMBER com precisão p. Um valor FLOAT é representado internamente como NUMBER. A precisão p pode variar de 1 a 126 dígitos binários. Um valor FLOAT requer de 1 a 22 bytes. Dados de caracteres de comprimento variável até 2 gigabytes, ou 2 31 -1 bytes. Fornecido para compatibilidade com versões anteriores. Faixa de data válida de 1 de janeiro de 4712 aC, até 31 de dezembro de 9999 AD. O formato padrão é determinado explicitamente pelo parâmetro NLSDATEFORMAT ou implicitamente pelo parâmetro NLSTERRITORY. O tamanho é fixado em 7 bytes. Este tipo de dados contém os campos de data e hora ANO. MÊS. DIA. HORA. MINUTO. E SEGUNDO. Não tem segundos fracionários ou fuso horário. Ano, mês e dia da data, bem como horas, minutos e segundos valores de tempo, onde a decisão fracionada é a quantidade de dígitos na parte fracionada do SEGUNDO campo de data e hora. Os valores aceitos da decisão de fração são de 0 a 9. O padrão é 6. O formato padrão é determinado explicitamente pelo parâmetro NLSTIMESTAMPFORMAT ou implicitamente pelo parâmetro NLSTERRITORY. O tamanho é de 7 ou 11 bytes, dependendo da precisão. Este tipo de dados contém os campos de data e hora ANO. MÊS. DIA. HORA. MINUTO. E SEGUNDO. Contém segmentos fraccionados, mas não possui fuso horário. TIMESTAMP (escala fraca) com ZONA DE TEMPO Todos os valores de TIMESTAMP, bem como o valor de deslocamento do fuso horário, onde fractionalsecondsprecision é o número de dígitos na parte fracionada do campo SECOND datetime. Os valores aceitos são 0 a 9. O padrão é 6. O formato padrão é determinado explicitamente pelo parâmetro NLSTIMESTAMPFORMAT ou implicitamente pelo parâmetro NLSTERRITORY. O tamanho é fixado em 13 bytes. Este tipo de dados contém os campos de data e hora ANO. MÊS. DIA. HORA. MINUTO. SEGUNDO. TIMEZONEHOUR. E TIMEZONEMINUTE. Tem segundos fracionários e um fuso horário explícito. TIMESTAMP (fração de segundos de precisão) COM ZONA DE TEMPO LOCAL Todos os valores de TIMESTAMP WITH TIME ZONE. Com as seguintes exceções: os dados são normalizados para o fuso horário do banco de dados quando ele é armazenado no banco de dados. Quando os dados são recuperados, os usuários vêem os dados no fuso horário da sessão. O formato padrão é determinado explicitamente pelo parâmetro NLSTIMESTAMPFORMAT ou implicitamente pelo parâmetro NLSTERRITORY. O tamanho é de 7 ou 11 bytes, dependendo da precisão. ANO DE INTERVALO (ano de apreciação) PARA MÊS Armazena um período de tempo em anos e meses, onde yearprecision é o número de dígitos no campo YEAR datetime. Os valores aceitos são 0 a 9. O padrão é 2. O tamanho é corrigido em 5 bytes. DIA DE INTERVALO (pressa do dia) PARA SEGUNDO (escuridão de fração). Armazena um período de tempo em dias, horas, minutos e segundos, onde dayprecision é o número máximo de dígitos no campo DATA data-hora. Os valores aceitos são de 0 a 9. O padrão é 2. a distância fracionada é a quantidade de dígitos na parte fracionada do campo SEGUNDO. Os valores aceitos são 0 a 9. O padrão é 6. O tamanho é fixado em 11 bytes. Tipo de dados FLOAT O tipo de dados FLOAT é um subtipo de NUMBER. Pode ser especificado com ou sem precisão, que tem a mesma definição que tem para NUMBER e pode variar de 1 a 126. A escala não pode ser especificada, mas é interpretada a partir dos dados. Cada valor FLOAT requer de 1 a 22 bytes. Para converter de binário para precisão decimal, multiplique n por 0.30103. Para converter de decimal em precisão binária, multiplique a precisão decimal por 3.32193. O máximo de 126 dígitos de precisão binária é aproximadamente equivalente a 38 dígitos de precisão decimal. A diferença entre NUMBER e FLOAT é melhor ilustrada pelo exemplo. No exemplo a seguir, os mesmos valores são inseridos nas colunas NUMBER e FLOAT: neste exemplo, o valor FLOAT retornado não pode exceder 5 dígitos binários. O maior número decimal que pode ser representado por 5 dígitos binários é 31. A última linha contém valores decimais que excedem 31. Portanto, o valor FLOAT deve ser truncado para que seus dígitos significativos não exijam mais de 5 dígitos binários. Assim, 123.45 é arredondado para 120, que tem apenas dois dígitos decimais significativos, exigindo apenas 4 dígitos binários. O Oracle Database usa o tipo de dados Oracle FLOAT internamente ao converter dados ANSI FLOAT. O Oracle FLOAT está disponível para você usar, mas a Oracle recomenda que você use os tipos de dados BINARYFLOAT e BINARYDOUBLE, pois eles são mais robustos. Consulte os Números de Ponto Flutuante para obter mais informações. Números de ponto flutuante Os números de ponto flutuante podem ter um ponto decimal em qualquer lugar do primeiro ao último dígito ou não podem ter nenhum ponto decimal. Um expoente pode opcionalmente ser usado seguindo o número para aumentar o alcance, por exemplo, 1.777 e -20. Um valor de escala não é aplicável a números de ponto flutuante, porque o número de dígitos que pode aparecer após o ponto decimal não é restrito. Os números binários de ponto flutuante diferem de NUMBER da forma como os valores são armazenados internamente pelo Oracle Database. Os valores são armazenados com precisão decimal para NUMBER. Todos os literais que estão dentro do alcance e precisão suportados por NUMBER são armazenados exatamente como NUMBER. Os literais são armazenados exatamente porque os literais são expressos usando precisão decimal (os dígitos de 0 a 9). Os números binários de ponto flutuante são armazenados usando precisão binária (os dígitos 0 e 1). Esse esquema de armazenamento não pode representar exatamente todos os valores com precisão decimal. Freqüentemente, o erro que ocorre ao converter um valor de decimal para precisão binária é desfeito quando o valor é convertido de volta da precisão binária para decimal. O literal 0.1 é um exemplo. O banco de dados Oracle fornece dois tipos de dados numéricos exclusivamente para números de ponto flutuante: BINARYFLOAT BINARYFLOAT é um tipo de dados de número de ponto flutuante de precisão única de 32 bits. Cada valor BINARYFLOAT requer 4 bytes. BINARYDOUBLE BINARYDOUBLE é um tipo de dados com número de ponto flutuante de dupla precisão de 64 bits. Cada valor BINARYDOUBLE requer 8 bytes. Em uma coluna NÚMERO, os números de ponto flutuante têm precisão decimal. Em uma coluna BINARYFLOAT ou BINARYDOUBLE, os números de ponto flutuante têm precisão binária. Os números de ponto flutuante binário suportam os valores especiais infinitos e NaN (não um número). Você pode especificar números de ponto flutuante dentro dos limites listados na Tabela 3-3. O formato para especificar números de ponto flutuante é definido em literais numéricos. Tabela 3-3 Limites de número de ponto flutuante Conformidade IEEE754 A implementação Oracle de tipos de dados de ponto flutuante está em conformidade substancialmente com o Padrão do Instituto de Engenharia Elétrica e Eletrônica (IEEE) para Aritmética Binária de Ponto Flutuante, Padrão IEEE 754-1985 (IEEE754). Os tipos de dados de ponto flutuante estão em conformidade com o IEEE754 nas seguintes áreas: A função SQL SQRT implementa a raiz quadrada. Veja SQRT. A função SQL REMAINDER implementa restante. Veja REMAINDER. Os operadores de comparação estão em conformidade, exceto para comparações com NaN. A Oracle ordena a NaN maior em relação a todos os outros valores, e avalia NaN igual a NaN. Consulte Condições de ponto flutuante. O modo de arredondamento padrão é suportado. O modo de manipulação de exceção padrão é suportado. Os valores especiais INF. - INF. E NaN são suportados. Consulte Condições de ponto flutuante. O arredondamento dos valores BINARYFLOAT e BINARYDOUBLE para valores BINARYFLOAT e BINARYDOUBLE com valor inteiro é fornecido pelas funções SQL ROUND. TRUNC. CEIL. E PISO. O arredondamento de BINARYFLOAT BINARYDOUBLE para decimal e decimal para BINARYFLOAT BINARYDOUBLE é fornecido pelas funções SQL TOCHAR. TONUMBER. TONCHAR. TOBINARYFLOAT. TOBINARYDOUBLE. E CAST. Os tipos de dados de ponto flutuante não estão em conformidade com IEEE754 nas seguintes áreas: -0 é coagido para 0. A comparação com NaN não é suportada. Todos os valores de NaN são coagidos a BINARYFLOATNAN ou BINARYDOUBLENAN. Os modos de arredondamento não-padrão não são suportados. O modo de manipulação de exceção não padrão não é suportado. Precedência numérica O precedência numérica determina, para operações que suportam tipos de dados numéricos, o tipo de dados que a Oracle usa se os argumentos para a operação tiverem diferentes tipos de dados. BINARYDOUBLE tem a maior precedência numérica, seguido de BINARYFLOAT. E finalmente por NUMBER. Portanto, em qualquer operação em vários valores numéricos: Se algum dos operandos for BINÁRIO DESLIGADO. Então, a Oracle tenta converter todos os operandos implicitamente em BINARYDOUBLE antes de executar a operação. Se nenhum dos operandos for BINARYDOUBLE, mas qualquer um dos operandos é BINARYFLOAT. Então a Oracle tenta converter todos os operandos implicitamente em BINARYFLOAT antes de executar a operação. Caso contrário, a Oracle tenta converter todos os operandos em NUMBER antes de executar a operação. Se qualquer conversão implícita for necessária e falhar, a operação falhará. Consulte a Tabela 3-10, Matriz de conversão de tipo implícito para obter mais informações sobre conversão implícita. No contexto de outros tipos de dados, os tipos de dados numéricos têm menor precedência do que os tipos de dados de data e intervalo e maior precedência do que o caractere e todos os outros tipos de dados. Não crie tabelas com colunas LONGO. Use colunas LOB (CLOB. NCLOB. BLOB) em vez disso. As colunas longas são suportadas apenas para compatibilidade com versões anteriores. Colunas longas armazenam cadeias de caracteres de comprimento variável contendo até 2 gigabytes -1 ou 2 31 -1 bytes. As colunas LONG têm muitas das características das colunas VARCHAR2. Você pode usar colunas longas para armazenar cadeias de texto longas. O comprimento dos valores LONGO pode ser limitado pela memória disponível em seu computador. LONADOS literais são formados como descrito para Text Literals. O Oracle também recomenda que você converta as colunas LONG existentes para colunas LOB. As colunas LOB estão sujeitas a muito menos restrições do que as colunas LONG. Além disso, a funcionalidade LOB é aprimorada em todas as versões, enquanto a funcionalidade LONG foi estática para vários lançamentos. Consulte a seção modifycolproperties de ALTER TABLE e TOLOB para obter mais informações sobre a conversão de colunas LONG para LOB. Você pode fazer referência a colunas LONG em instruções SQL nesses locais: cláusulas SET das instruções UPDATE. Cláusulas VALUES das instruções INSERT. O uso de valores LONG está sujeito a essas restrições: uma tabela pode conter apenas uma coluna LONG. Não é possível criar um tipo de objeto com um atributo LONG. Colunas longas não podem aparecer nas cláusulas WHERE ou em restrições de integridade (exceto que podem aparecer em restrições NULL e NOT NULL). Colunas longas não podem ser indexadas. Os dados prolongados não podem ser especificados em expressões regulares. Uma função armazenada não pode retornar um valor LONGO. Você pode declarar uma variável ou argumento de uma unidade de programa PLSQL usando o tipo de dados LONGO. No entanto, você não pode chamar a unidade de programa do SQL. Dentro de uma única instrução SQL, todas as colunas LONG, tabelas atualizadas e tabelas bloqueadas devem estar localizadas no mesmo banco de dados. As colunas RAW longas e longas não podem ser usadas em instruções SQL distribuídas e não podem ser replicadas. Se uma tabela tiver duas colunas LONG e LOB, não é possível vincular mais de 4000 bytes de dados às colunas LONG e LOB na mesma instrução SQL. No entanto, você pode vincular mais de 4000 bytes de dados para a coluna LONG ou LOB. Além disso, as colunas LONG não podem aparecer nessas partes das instruções SQL: cláusulas GROUP BY, ORDER BY ou cláusulas CONNECT BY ou com o operador DISTINCT em instruções SELECT O operador UNIQUE de uma instrução SELECT A lista de colunas de uma instrução CREATE CLUSTER O Cláusula CLUSTER de uma instrução CREATE MATERIALIZED VIEW SQL funções, expressões ou condições incorporadas SELECT listas de consultas contendo cláusulas GROUP BY SELECT listas de subconsultas ou consultas combinadas pelo UNION. INTERSECTA. Ou MINUS set operadores SELECT listas de CREATE TABLE. AS SELECT instruções ALTER TABLE. Instruções MOVE SELECCIONAR listas em subconsultas nas instruções INSERT Os disparadores podem usar o tipo de dados LONGO da seguinte maneira: Uma instrução SQL dentro de um gatilho pode inserir dados em uma coluna LONG. Se os dados de uma coluna LONG podem ser convertidos em um tipo de dados restritos (como CHAR e VARCHAR2), uma coluna LONG pode ser referenciada em uma instrução SQL dentro de um gatilho. Variáveis ​​em gatilhos não podem ser declaradas usando o tipo de dados LONGO. NOVO e. OLD não pode ser usado com colunas longas. Você pode usar as funções da Oracle Call Interface para recuperar uma parte de um valor LONG do banco de dados. Os tipos de dados de data e hora são DATA. TIMESTAMP. TIMESTAMP COM ZONA DE TEMPO. E TIMESTAMP COM ZONA LOCAL. Os valores dos tipos de dados de data e hora às vezes são chamados de data-hora. Os tipos de dados de intervalo são INTERVALO ANO PARA MÊS e INTERVALO DIA A SEGUNDO. Os valores dos tipos de dados de intervalo são às vezes chamados de intervalos. Para obter informações sobre como expressar os valores de data e hora como literais, consulte Literais de intervalo e Literatura de intervalo. Tanto os tempos de data como os intervalos são compostos por campos. Os valores desses campos determinam o valor do tipo de dados. A Tabela 3-4 lista os campos de data e hora e seus possíveis valores para data e hora. Para evitar resultados inesperados nas suas operações DML nos dados de data e hora, você pode verificar os fusos horários do banco de dados e da sessão consultando as funções SQL DBTIMEZONE e SESSIONTIMEZONE incorporadas. Se os fusos horários não tiverem sido configurados manualmente, o Oracle Database usará o fuso horário do sistema operacional por padrão. Se o fuso horário do sistema operacional não for um fuso horário do Oracle válido, o Oracle usará UTC como o valor padrão. Tabela 3-4 Campos e valores de data e hora TIMEZONEHOUR e TIMEZONEMINUTE são especificados juntos e interpretados como uma entidade no formato - hh. mi. Com valores variando de -12: 59 a 14:00. Consulte o Oracle Data Provider for. NET Developers Guide para obter informações sobre como especificar os valores do fuso horário para essa API. DATA Tipo de dados O tipo de dados DATE armazena informações de data e hora. Embora as informações de data e hora possam ser representadas nos tipos de dados de caracteres e números, o tipo de dados DATE possui propriedades associadas especiais. Para cada valor DATE, o Oracle armazena as seguintes informações: ano, mês, dia, hora, minuto e segundo. Você pode especificar um valor DATE como um literal, ou você pode converter um caracter ou valor numérico para um valor de data com a função TODATE. Para exemplos de expressar valores de DATE nestas duas formas, consulte Literais de Datatime. Usando Julian Days Um número de dia juliano é o número de dias desde 01 de janeiro de 4712 aC. Os dias julianos permitem o namoro contínuo a partir de uma referência comum. Você pode usar o modelo de formato de data J com as funções de data TODATE e TOCHAR para converter entre os valores do Oracle DATE e seus equivalentes julianos. Oracle Database usa o sistema astronômico de cálculo de dias julianos, em que o ano 4713 aC é especificado como -4712. O sistema histórico de cálculo dos dias julianos, em contraste, especifica 4713 aC como -4713. Se você estiver comparando os dias Oracle Julian com os valores calculados usando o sistema histórico, então tome cuidado para permitir a diferença de 365 dias nas datas de BC. Para obter mais informações, consulte aa. usno. navy. milfaqdocsmillennium. php. Os valores da data padrão são determinados da seguinte forma: O ano é o ano atual, conforme retornado pelo SYSDATE. O mês é o mês atual, conforme retornado pelo SYSDATE. O dia é 01 (o primeiro dia do mês). A hora, o minuto e o segundo são todos 0. Esses valores padrão são usados ​​em uma consulta que solicita valores de data onde a própria data não está especificada, como no exemplo a seguir, que é emitido no mês de maio: Exemplo Esta declaração retorna O equivalente juliano de 1 de janeiro de 2009: Tipo de dados TIMESTAMP O tipo de dados TIMESTAMP é uma extensão do tipo de dados DATA. Ele armazena o ano, mês e dia do tipo de dados DATE, além de horas, minutos e segundos valores. Este tipo de dados é útil para armazenar valores de tempo precisos e para coletar e avaliar informações de data em regiões geográficas. Especifique o tipo de dados TIMESTAMP da seguinte forma: onde fractionalsecondsprecision especifica opcionalmente o número de dígitos que o Oracle armazena na parte fracionada do campo SECOND datetime. Quando você cria uma coluna desse tipo de dados, o valor pode ser um número no intervalo de 0 a 9. O padrão é 6. TOTIMESTAMP para obter informações sobre como converter dados de caracteres para dados TIMESTAMP TIMESTAMP WITH TIME ZONE Tipo de dados TIMESTAMP WITH TIME ZONE é um Variante de TIMESTAMP que inclui um nome de região de fuso horário ou um deslocamento de fuso horário em seu valor. O deslocamento do fuso horário é a diferença (em horas e minutos) entre a hora local e UTC (Tempo Universal Cardinalmente coordenado, Timemdashformerly Greenwich). Este tipo de dados é útil para preservar as informações do fuso horário local. Especifique o tipo de dados TIMESTAMP WITH TIME ZONE da seguinte maneira: onde fractionalsecondsprecision especifica opcionalmente o número de dígitos que o Oracle armazena na parte fracionada do campo SECOND datetime. Quando você cria uma coluna deste tipo de dados, o valor pode ser um número no intervalo de 0 a 9. O padrão é 6. Os dados do fuso horário Oracle são derivados da informação de domínio público disponível em iana. orgtime-zones. Os dados do fuso horário Oracle podem não refletir os dados mais recentes disponíveis neste site. TOTIMESTAMPTZ para obter informações sobre como converter dados de caracteres para TIMESTAMP WITH TIME ZONE dados ALTER SESSION para obter informações sobre o parâmetro de sessão ERRORONOVERLAPTIME TIMESTAMP COM LOCAL TIME ZONE Tipo de dados TIMESTAMP WITH LOCAL TIME ZONE é outra variante do TIMESTAMP que é sensível às informações do fuso horário. Difere da TIMESTAMP WITH TIME ZONE em que os dados armazenados no banco de dados são normalizados para o fuso horário do banco de dados e as informações do fuso horário não são armazenadas como parte dos dados da coluna. Quando um usuário recupera os dados, o Oracle retorna no fuso horário da sessão local dos usuários. Este tipo de dados é útil para informações de data que sempre devem ser exibidas no fuso horário do sistema cliente em um aplicativo de duas camadas. Especifique o tipo de dados TIMESTAMP WITH LOCAL TIME ZONE da seguinte forma: onde fractionalsecondsprecision opcionalmente especifica o número de dígitos que o Oracle armazena na parte fracionada do campo SECOND datetime. Quando você cria uma coluna deste tipo de dados, o valor pode ser um número no intervalo de 0 a 9. O padrão é 6. Os dados do fuso horário Oracle são derivados da informação de domínio público disponível em iana. orgtime-zones. Os dados do fuso horário Oracle podem não refletir os dados mais recentes disponíveis neste site. Guia do Desenvolvedor de Aplicativos Avançados do Oracle Database para exemplos de uso desse tipo de dados e CAST para obter informações sobre a conversão de dados de caracteres para TIMESTAMP COM INTERVALO DE ZONA LOCAL INTERVALO PARA MÊS Tipo de dados INTERVALO ANO PARA MÊS armazena um período de tempo usando os campos de data e hora YEAR e MONTH. Este tipo de dados é útil para representar a diferença entre dois valores de data e hora quando somente os valores de ano e mês são significativos. Especifique o ANO DE INTERVALO PARA MÊS da seguinte forma: onde yearprecision é o número de dígitos no campo YEAR datetime. O valor padrão de yearprecision é 2. Você tem uma grande flexibilidade ao especificar valores de intervalo como literais. Consulte Interval Literals para obter informações detalhadas sobre a especificação de valores de intervalo como literais. Consulte também Exemplos de data e intervalo para um exemplo usando intervalos. DIA DE INTERVALO PARA SEGUNDO Tipo de Dados INTERVALO DIA PARA SEGUNDO armazena um período de tempo em termos de dias, horas, minutos e segundos. Este tipo de dados é útil para representar a diferença precisa entre dois valores de data e hora. Especifique este tipo de dados da seguinte forma: dayprecision é o número de dígitos no campo DAY datetime. Os valores aceitos são de 0 a 9. O padrão é 2. a distância fracionada é a quantidade de dígitos na parte fracionada do campo SEGUNDO data e hora. Os valores aceitos são 0 a 9. O padrão é 6. Você tem uma grande flexibilidade ao especificar valores de intervalo como literais. Consulte Interval Literals para obter informações detalhadas sobre especificar valores de intervalo como literais. Consulte também Exemplos de data e intervalo para um exemplo usando intervalos. DatetimeInterval Arithmetic Você pode executar uma série de operações aritméticas nas datas (DATE), timestamp (TIMESTAMP. TIMESTAMP WITH TIME ZONE. E TIMESTAMP WITH LOCAL TIME ZONE) e intervalo (INTERVALO DIA PARA SEGUNDO e INTERVALHO ANO PARA MÊS). Oracle calcula os resultados com base nas seguintes regras: Você pode usar constantes NUMBER em operações aritméticas nos valores de data e hora, mas não valores de intervalo. O Oracle converte internamente os valores do timestamp para os valores da data e interpreta as constantes NUMBER nas datas aritméticas do tempo e do intervalo como números de dias. Por exemplo, SYSDATE 1 é amanhã. SYSDATE - 7 é há uma semana. SYSDATE (101440) é dez minutos a partir de agora. Subtrair a coluna de assalariado dos funcionários da tabela de exemplo da SYSDATE retorna o número de dias desde que seu empregado foi contratado. Você não pode multiplicar ou dividir valores de data ou hora. O Oracle converte implicitamente os operandos BINARYFLOAT e BINARYDOUBLE para NUMBER. Cada valor DATE contém um componente de tempo, e o resultado de muitas operações de data inclui uma fração. Esta fração significa uma parcela de um dia. Por exemplo, 1,5 dias é de 36 horas. Essas frações também são retornadas pelas funções integradas do Oracle para operações comuns em dados DATE. Por exemplo, a função MONTHSBETWEEN retorna o número de meses entre duas datas. A parcela fracionada do resultado representa a parcela de um mês de 31 dias. Se um operando é um valor DATE ou um valor numérico, nenhum dos quais contém componentes de fuso horário ou de segundos fracionados, então: o Oracle converte implicitamente o outro operando em dados DATA. A exceção é a multiplicação de um valor numérico vezes um intervalo, que retorna um intervalo. Se o outro operando tiver um valor do fuso horário, o Oracle usará o fuso horário da sessão no valor retornado. Se o outro operando tiver um valor de segundos fracionados, o valor de segundos fracionários será perdido. Quando você passa um timestamp, intervalo ou valor numérico para uma função incorporada que foi projetada apenas para o tipo de dados DATE, o Oracle converte implicitamente o valor não-DATA em um valor DATA. Consulte Funções de data e hora para obter informações sobre quais funções causam conversão implícita em DATA. Quando os cálculos de intervalo retornam um valor de data e hora, o resultado deve ser um valor de data e hora atual ou o banco de dados retorna um erro. Por exemplo, as próximas duas instruções retornam erros: a primeira falha porque adicionar um mês para um mês de 31 dias resultaria em 31 de setembro, que não é uma data válida. O segundo falha porque adicionar um ano para uma data que existe apenas a cada quatro anos não é válido. No entanto, a próxima declaração é bem-sucedida, porque adicionar quatro anos para uma data de 29 de fevereiro é válido: a Oracle executa toda a aritmética do horário no horário UTC. Para TIMESTAMP COM ZONA LOCAL. Oracle converte o valor de data e hora do fuso horário do banco de dados para UTC e converte de volta para o fuso horário do banco de dados depois de executar a aritmética. Para TIMESTAMP COM ZONA DE TEMPO. O valor de data e hora está sempre em UTC, portanto, nenhuma conversão é necessária. A tabela 3-5 é uma matriz de operações aritméticas de data e hora. Dashes representam operações que não são suportadas. Tabela 3-5 Matriz de exemplos de aritmética de data / hora Você pode adicionar uma expressão de valor de intervalo a uma hora de início. Considere a mesa de amostra com ordens de ordem de coluna. A seguinte declaração adiciona 30 dias ao valor da coluna orderdate: Suporte para Horários de Verão O banco de dados Oracle determina automaticamente, para qualquer região de fuso horário, se a luz do dia está vigente e retorna valores de tempo locais de acordo. O valor de data e hora é suficiente para a Oracle determinar se o horário de verão está em vigor para uma determinada região em todos os casos, exceto os limites. Ocorre um caso de fronteira durante o período em que a luz do dia entra ou sai do efeito. Por exemplo, na região dos EUA-Pacífico, quando o horário de verão entrar em vigor, o tempo muda de 2:00 da manhã para 3:00 da. m. O intervalo de uma hora entre 2 e 3 a. m. não existe. Quando o horário de verão está fora de efeito, o tempo muda de 2:00 da. m. às 1:00 da manhã e o intervalo de uma hora entre 1 e 2 horas é repetido. Para resolver esses casos de limites, a Oracle usa os elementos de formato TZR e TZD, conforme descrito na Tabela 3-17. TZR representa o nome da região do fuso horário nas cordas de entrada do tempo. Exemplos são AustraliaNorth, UTC e Singapore. TZD representa uma forma abreviada do nome da região do fuso horário com informações de verão. Exemplos são PST para o tempo padrão USPacific e PDT para USPacific luz do dia. Para ver uma listagem de valores válidos para os elementos do formato TZR e TZD, consulte as colunas TZNAME e TZABBREV da visualização de desempenho dinâmico VTIMEZONENAMES. Os nomes das regiões do fuso horário são necessários pelo recurso de economia de luz do dia. Esses nomes são armazenados em dois tipos de arquivos do fuso horário: um grande e um pequeno. Um desses arquivos é o arquivo padrão, dependendo do seu ambiente e do lançamento do banco de dados Oracle que você está usando. Para obter mais informações sobre arquivos e nomes de fuso horário, consulte o Guia de Suporte de Globalização de Banco de Dados Oracle. Para obter uma lista completa dos nomes das regiões do fuso horário em ambos os arquivos, consulte o Guia de Suporte de Globalização do Banco de Dados Oracle. Os dados do fuso horário Oracle são derivados da informação de domínio público disponível em iana. orgtime-zones. Os dados do fuso horário Oracle podem não refletir os dados mais recentes disponíveis neste site. Modelos de formato de data e hora para obter informações sobre os elementos de formato e o parâmetro de sessão ERRORONOVERLAPTIME. Referência do banco de dados Oracle para obter informações sobre as exibições de desempenho dinâmico Exemplos de data e intervalo O exemplo a seguir mostra como especificar alguns tipos de data e intervalo de dados. A coluna starttime é do tipo TIMESTAMP. A precisão implícita de segundos fracionários de TIMESTAMP é 6. A coluna duration1 é do tipo INTERVAL DAY TO SECOND. O número máximo de dígitos no campo DAY é 6 eo número máximo de dígitos no segundo fracionamento é 5. O número máximo de dígitos em todos os outros campos de data e hora é 2. A coluna duration2 é de tipo INTERVALO ANO PARA MÊS. O número máximo de dígitos do valor em cada campo (ANO e MÊS) é 2. Os tipos de dados de intervalo não possuem modelos de formato. Portanto, para ajustar sua apresentação, você deve combinar funções de caracteres como EXTRACT e concatenar os componentes. Por exemplo, os exemplos a seguir consultam as tabelas hr. employees e oe. orders, respectivamente, e alteram o intervalo de saída da forma yy-mm para AAA milímetros meses e de ddhh para dddd dias hh horas: RAW e LONG RAW Data Tipos Os tipos de dados RAW e LONG RAW armazenam dados que não devem ser explicitamente convertidos pelo Oracle Database ao mover dados entre diferentes sistemas. Esses tipos de dados são destinados a dados binários ou a cadeias de bytes. Por exemplo, você pode usar LONG RAW para armazenar gráficos, som, documentos ou arrays de dados binários, para os quais a interpretação depende do uso. O Oracle recomenda fortemente que você coloque as colunas LONG RAW em colunas binárias LOB (BLOB). LOB columns are subject to far fewer restrictions than LONG columns. See TOLOB for more information. RAW is a variable-length data type like VARCHAR2. except that Oracle Net (which connects client software to a database or one database to another) and the Oracle import and export utilities do not perform character conversion when transmitting RAW or LONG RAW data. In contrast, Oracle Net and the Oracle import and export utilities automatically convert CHAR. VARCHAR2. and LONG data between different database character sets, if data is transported between databases, or between the database character set and the client character set, if data is transported between a database and a client. The client character set is determined by the type of the client interface, such as OCI or JDBC, and the client configuration (for example, the NLSLANG environment variable). When Oracle implicitly converts RAW or LONG RAW data to character data, the resulting character value contains a hexadecimal representation of the binary input, where each character is a hexadecimal digit ( 0 - 9. A - F ) representing four consecutive bits of RAW data. For example, one byte of RAW data with bits 11001011 becomes the value CB . When Oracle implicitly converts character data to RAW or LONG RAW. it interprets each consecutive input character as a hexadecimal representation of four consecutive bits of binary data and builds the resulting RAW or LONG RAW value by concatenating those bits. If any of the input characters is not a hexadecimal digit ( 0 - 9. A - F. a - f ), then an error is reported. If the number of characters is odd, then the result is undefined. The SQL functions RAWTOHEX and HEXTORAW perform explicit conversions that are equivalent to the above implicit conversions. Other types of conversions between RAW and character data are possible with functions in the Oracle-supplied PLSQL packages UTLRAW and UTLI18N . The built-in LOB data types BLOB. CLOB. and NCLOB (stored internally) and BFILE (stored externally) can store large and unstructured data such as text, image, video, and spatial data. The size of BLOB. CLOB. and NCLOB data can be up to (2 32 -1 bytes) (the value of the CHUNK parameter of LOB storage). If the tablespaces in your database are of standard block size, and if you have used the default value of the CHUNK parameter of LOB storage when creating a LOB column, then this is equivalent to (2 32 -1 bytes) (database block size). BFILE data can be up to 2 64 -1 bytes, although your operating system may impose restrictions on this maximum. When creating a table, you can optionally specify different tablespace and storage characteristics for LOB columns or LOB object attributes from those specified for the table. CLOB. NCLOB. and BLOB values up to approximately 4000 bytes are stored inline if you enable storage in row at the time the LOB column is created. LOBs greater than 4000 bytes are always stored externally. Refer to ENABLE STORAGE IN ROW for more information. LOB columns contain LOB locators that can refer to internal (in the database) or external (outside the database) LOB values. Selecting a LOB from a table actually returns the LOB locator and not the entire LOB value. The DBMSLOB package and Oracle Call Interface (OCI) operations on LOBs are performed through these locators. LOBs are similar to LONG and LONG RAW types, but differ in the following ways: LOBs can be attributes of an object type (user-defined data type). The LOB locator is stored in the table column, either with or without the actual LOB value. BLOB. NCLOB. and CLOB values can be stored in separate tablespaces. BFILE data is stored in an external file on the server. When you access a LOB column, the locator is returned. A LOB can be up to (2 32 -1 bytes)(database block size) in size. BFILE data can be up to 2 64 -1 bytes, although your operating system may impose restrictions on this maximum. LOBs permit efficient, random, piece-wise access to and manipulation of data. You can define more than one LOB column in a table. With the exception of NCLOB. you can define one or more LOB attributes in an object. You can declare LOB bind variables. You can select LOB columns and LOB attributes. You can insert a new row or update an existing row that contains one or more LOB columns or an object with one or more LOB attributes. In update operations, you can set the internal LOB value to NULL. empty, or replace the entire LOB with data. You can set the BFILE to NULL or make it point to a different file. You can update a LOB row-column intersection or a LOB attribute with another LOB row-column intersection or LOB attribute. You can delete a row containing a LOB column or LOB attribute and thereby also delete the LOB value. For BFILEs, the actual operating system file is not deleted. You can access and populate rows of an inline LOB column (a LOB column stored in the database) or a LOB attribute (an attribute of an object type column stored in the database) simply by issuing an INSERT or UPDATE statement. Restrictions on LOB Columns LOB columns are subject to a number of rules and restrictions. See Oracle Database SecureFiles and Large Objects Developers Guide for a complete listing. the modifycolproperties clause of ALTER TABLE and TOLOB for more information on converting LONG columns to LOB columns BFILE Data Type The BFILE data type enables access to binary file LOBs that are stored in file systems outside Oracle Database. A BFILE column or attribute stores a BFILE locator, which serves as a pointer to a binary file on the server file system. The locator maintains the directory name and the filename. You can change the filename and path of a BFILE without affecting the base table by using the BFILENAME function. Refer to BFILENAME for more information on this built-in SQL function. Binary file LOBs do not participate in transactions and are not recoverable. Rather, the underlying operating system provides file integrity and durability. BFILE data can be up to 2 64 -1 bytes, although your operating system may impose restrictions on this maximum. The database administrator must ensure that the external file exists and that Oracle processes have operating system read permissions on the file. The BFILE data type enables read-only support of large binary files. You cannot modify or replicate such a file. Oracle provides APIs to access file data. The primary interfaces that you use to access file data are the DBMSLOB package and Oracle Call Interface (OCI). BLOB Data Type The BLOB data type stores unstructured binary large objects. BLOB objects can be thought of as bitstreams with no character set semantics. BLOB objects can store binary data up to (4 gigabytes -1) (the value of the CHUNK parameter of LOB storage). If the tablespaces in your database are of standard block size, and if you have used the default value of the CHUNK parameter of LOB storage when creating a LOB column, then this is equivalent to (4 gigabytes - 1) (database block size). BLOB objects have full transactional support. Changes made through SQL, the DBMSLOB package, or Oracle Call Interface (OCI) participate fully in the transaction. BLOB value manipulations can be committed and rolled back. However, you cannot save a BLOB locator in a PLSQL or OCI variable in one transaction and then use it in another transaction or session. CLOB Data Type The CLOB data type stores single-byte and multibyte character data. Both fixed-width and variable-width character sets are supported, and both use the database character set. CLOB objects can store up to (4 gigabytes -1) (the value of the CHUNK parameter of LOB storage) of character data. If the tablespaces in your database are of standard block size, and if you have used the default value of the CHUNK parameter of LOB storage when creating a LOB column, then this is equivalent to (4 gigabytes - 1) (database block size). CLOB objects have full transactional support. Changes made through SQL, the DBMSLOB package, or Oracle Call Interface (OCI) participate fully in the transaction. CLOB value manipulations can be committed and rolled back. However, you cannot save a CLOB locator in a PLSQL or OCI variable in one transaction and then use it in another transaction or session. NCLOB Data Type The NCLOB data type stores Unicode data. Both fixed-width and variable-width character sets are supported, and both use the national character set. NCLOB objects can store up to (4 gigabytes -1) (the value of the CHUNK parameter of LOB storage) of character text data. If the tablespaces in your database are of standard block size, and if you have used the default value of the CHUNK parameter of LOB storage when creating a LOB column, then this is equivalent to (4 gigabytes - 1) (database block size). NCLOB objects have full transactional support. Changes made through SQL, the DBMSLOB package, or OCI participate fully in the transaction. NCLOB value manipulations can be committed and rolled back. However, you cannot save an NCLOB locator in a PLSQL or OCI variable in one transaction and then use it in another transaction or session. Rowid Data Types Each row in the database has an address. The sections that follow describe the two forms of row address in an Oracle Database. ROWID Data Type The rows in heap-organized tables that are native to Oracle Database have row addresses called rowids. You can examine a rowid row address by querying the pseudocolumn ROWID. Values of this pseudocolumn are strings representing the address of each row. These strings have the data type ROWID. You can also create tables and clusters that contain actual columns having the ROWID data type. Oracle Database does not guarantee that the values of such columns are valid rowids. Refer to Chapter 2, Pseudocolumns for more information on the ROWID pseudocolumn. Beginning with Oracle8, Oracle SQL incorporated an extended format for rowids to efficiently support partitioned tables and indexes and tablespace-relative data block addresses without ambiguity. If you are running Version 7 of the database and you intend to upgrade, use the DBMSROWID package to migrate rowids in your data to the extended format. Refer to Oracle Database PLSQL Packages and Types Reference for information on DBMSROWID and to Oracle Database Upgrade Guide for information on upgrading from Oracle7. Rowids contain the following information: The data block of the data file containing the row. The length of this string depends on your operating system. The row in the data block. The database file containing the row. The first data file has the number 1. The length of this string depends on your operating system. The data object number. which is an identification number assigned to every database segment. You can retrieve the data object number from the data dictionary views USEROBJECTS. DBAOBJECTS. and ALLOBJECTS. Objects that share the same segment (clustered tables in the same cluster, for example) have the same object number. Rowids are stored as base 64 values that can contain the characters A-Z, a-z, 0-9, and the plus sign () and forward slash (). Rowids are not available directly. You can use the supplied package DBMSROWID to interpret rowid contents. The package functions extract and provide information on the four rowid elements listed above. Oracle Database PLSQL Packages and Types Reference for information on the functions available with the DBMSROWID package and how to use them UROWID Data Type The rows of some tables have addresses that are not physical or permanent or were not generated by Oracle Database. For example, the row addresses of index-organized tables are stored in index leaves, which can move. Rowids of foreign tables (such as DB2 tables accessed through a gateway) are not standard Oracle rowids. Oracle uses universal rowids ( urowids ) to store the addresses of index-organized and foreign tables. Index-organized tables have logical urowids and foreign tables have foreign urowids. Both types of urowid are stored in the ROWID pseudocolumn (as are the physical rowids of heap-organized tables). Oracle creates logical rowids based on the primary key of the table. The logical rowids do not change as long as the primary key does not change. The ROWID pseudocolumn of an index-organized table has a data type of UROWID. You can access this pseudocolumn as you would the ROWID pseudocolumn of a heap-organized table (using a SELECT. ROWID statement). If you want to store the rowids of an index-organized table, then you can define a column of type UROWID for the table and retrieve the value of the ROWID pseudocolumn into that column. ANSI, DB2, and SQLDS Data Types SQL statements that create tables and clusters can also use ANSI data types and data types from the IBM products SQLDS and DB2. Oracle recognizes the ANSI or IBM data type name that differs from the Oracle Database data type name. It converts the data type to the equivalent Oracle data type, records the Oracle data type as the name of the column data type, and stores the column data in the Oracle data type based on the conversions shown in the tables that follow. Table 3-6 ANSI Data Types Converted to Oracle Data Types ANSI SQL Data Type The NUMERIC and DECIMAL data types can specify only fixed-point numbers. For those data types, the scale ( s ) defaults to 0. The FLOAT data type is a floating-point number with a binary precision b. The default precision for this data type is 126 binary, or 38 decimal. The DOUBLE PRECISION data type is a floating-point number with binary precision 126. The REAL data type is a floating-point number with a binary precision of 63, or 18 decimal. Note that data of type TIME can also be expressed as Oracle datetime data. Table 3-7 SQLDS and DB2 Data Types Converted to Oracle Data Types SQLDS or DB2 Data Type Oracle Data Type DECIMAL(p, s) ( Note 1 ) The DECIMAL data type can specify only fixed-point numbers. For this data type, s defaults to 0. The FLOAT data type is a floating-point number with a binary precision b. The default precision for this data type is 126 binary or 38 decimal. User-Defined Types User-defined data types use Oracle built-in data types and other user-defined data types as the building blocks of object types that model the structure and behavior of data in applications. The sections that follow describe the various categories of user-defined types. Oracle Database Concepts for information about Oracle built-in data types CREATE TYPE and the CREATE TYPE BODY for information about creating user-defined types Object Types Object types are abstractions of the real-world entities, such as purchase orders, that application programs deal with. An object type is a schema object with three kinds of components: A name. which identifies the object type uniquely within that schema. Attributes. which are built-in types or other user-defined types. Attributes model the structure of the real-world entity. Methods. which are functions or procedures written in PLSQL and stored in the database, or written in a language like C or Java and stored externally. Methods implement operations the application can perform on the real-world entity. REF Data Types An object identifier (represented by the keyword OID ) uniquely identifies an object and enables you to reference the object from other objects or from relational tables. A data type category called REF represents such references. A REF data type is a container for an object identifier. REF values are pointers to objects. When a REF value points to a nonexistent object, the REF is said to be dangling. A dangling REF is different from a null REF. To determine whether a REF is dangling or not, use the condition IS NOT DANGLING. For example, given object view ocorders in the sample schema oe. the column customerref is of type REF to type customertyp. which has an attribute custemail : An array is an ordered set of data elements. All elements of a given array are of the same data type. Each element has an index. which is a number corresponding to the position of the element in the array. The number of elements in an array is the size of the array. Oracle arrays are of variable size, which is why they are called varrays. You must specify a maximum size when you declare the varray. When you declare a varray, it does not allocate space. It defines a type, which you can use as: The data type of a column of a relational table An object type attribute A PLSQL variable, parameter, or function return type Oracle normally stores an array object either in line (as part of the row data) or out of line (in a LOB), depending on its size. However, if you specify separate storage characteristics for a varray, then Oracle stores it out of line, regardless of its size. Refer to the varraycolproperties of CREATE TABLE for more information about varray storage. Nested Tables A nested table type models an unordered set of elements. The elements may be built-in types or user-defined types. You can view a nested table as a single-column table or, if the nested table is an object type, as a multicolumn table, with a column for each attribute of the object type. A nested table definition does not allocate space. It defines a type, which you can use to declare: The data type of a column of a relational table An object type attribute A PLSQL variable, parameter, or function return type When a nested table appears as the type of a column in a relational table or as an attribute of the underlying object type of an object table, Oracle stores all of the nested table data in a single table, which it associates with the enclosing relational or object table. Oracle-Supplied Types Oracle provides SQL-based interfaces for defining new types when the built-in or ANSI-supported types are not sufficient. The behavior for these types can be implemented in CC, Java, or PL SQL. Oracle Database automatically provides the low-level infrastructure services needed for input-output, heterogeneous client-side access for new data types, and optimizations for data transfers between the application and the database. These interfaces can be used to build user-defined (or object) types and are also used by Oracle to create some commonly useful data types. Several such data types are supplied with the server, and they serve both broad horizontal application areas (for example, the Any types) and specific vertical ones (for example, the spatial types). The Oracle-supplied types, along with cross-references to the documentation of their implementation and use, are described in the following sections: The Any types provide highly flexible modeling of procedure parameters and table columns where the actual type is not known. These data types let you dynamically encapsulate and access type descriptions, data instances, and sets of data instances of any other SQL type. These types have OCI and PLSQL interfaces for construction and access. This type can contain a type description of any named SQL type or unnamed transient type. This type contains an instance of a given type, with data, plus a description of the type. ANYDATA can be used as a table column data type and lets you store heterogeneous values in a single column. The values can be of SQL built-in types as well as user-defined types. ANYDATASET This type contains a description of a given type plus a set of data instances of that type. ANYDATASET can be used as a procedure parameter data type where such flexibility is needed. The values of the data instances can be of SQL built-in types as well as user-defined types. Oracle Database PLSQL Packages and Types Reference for information on the ANYTYPE. ANYDATA. and ANYDATASET types Extensible Markup Language (XML) is a standard format developed by the World Wide Web Consortium (W3C) for representing structured and unstructured data on the World Wide Web. Universal resource identifiers (URIs) identify resources such as Web pages anywhere on the Web. Oracle provides types to handle XML and URI data, as well as a class of URIs called DBURIRef types to access data stored within the database itself. It also provides a set of types to store and access both external and internal URIs from within the database. This Oracle-supplied type can be used to store and query XML data in the database. XMLType has member functions you can use to access, extract, and query the XML data using XPath expressions. XPath is another standard developed by the W3C committee to traverse XML documents. Oracle XMLType functions support many W3C XPath expressions. Oracle also provides a set of SQL functions and PLSQL packages to create XMLType values from existing relational or object-relational data. XMLType is a system-defined type, so you can use it as an argument of a function or as the data type of a table or view column. You can also create tables and views of XMLType. When you create an XMLType column in a table, you can choose to store the XML data in a CLOB column, as binary XML (stored internally as a CLOB ), or object relationally. You can also register the schema (using the DBMSXMLSCHEMA package) and create a table or column conforming to the registered schema. In this case Oracle stores the XML data in underlying object-relational columns by default, but you can specify storage in a CLOB or binary XML column even for schema-based data. Queries and DML on XMLType columns operate the same regardless of the storage mechanism. Oracle XML DB Developers Guide for information about using XMLType columns URI Data Types Oracle supplies a family of URI typesmdash URIType. DBURIType. XDBURIType. and HTTPURIType mdashwhich are related by an inheritance hierarchy. URIType is an object type and the others are subtypes of URIType. Since URIType is the supertype, you can create columns of this type and store DBURIType or HTTPURIType type instances in this column. HTTPURIType You can use HTTPURIType to store URLs to external Web pages or to files. Oracle accesses these files using HTTP (Hypertext Transfer Protocol). XDBURIType You can use XDBURIType to expose documents in the XML database hierarchy as URIs that can be embedded in any URIType column in a table. The XDBURIType consists of a URL, which comprises the hierarchical name of the XML document to which it refers and an optional fragment representing the XPath syntax. The fragment is separated from the URL part by a pound sign (). The following lines are examples of XDBURIType : DBURIType DBURIType can be used to store DBURIRef values, which reference data inside the database. Storing DBURIRef values lets you reference data stored inside or outside the database and access the data consistently. DBURIRef values use an XPath-like representation to reference data inside the database. If you imagine the database as an XML tree, then you would see the tables, rows, and columns as elements in the XML document. For example, the sample human resources user hr would see the following XML tree: The DBURIRef is an XPath expression over this virtual XML document. So to reference the SALARY value in the EMPLOYEES table for the employee with employee number 205, you can write a DBURIRef as, Using this model, you can reference data stored in CLOB columns or other columns and expose them as URLs to the external world. URIFactory Package Oracle also provides the URIFactory package, which can create and return instances of the various subtypes of the URITypes. The package analyzes the URL string, identifies the type of URL (HTTP, DBURI. and so on), and creates an instance of the subtype. To create a DBURI instance, the URL must start with the prefix oradb. For example, URIFactory. getURI(oradbHREMPLOYEES) would create a DBURIType instance and URIFactory. getUri(sysschema) would create an XDBURIType instance. Oracle Database Object-Relational Developers Guide for general information on object types and type inheritance Oracle XML DB Developers Guide for more information about these supplied types and their implementation Oracle Streams Advanced Queuing Users Guide for information about using XMLType with Oracle Advanced Queuing Spatial Types Oracle Spatial is designed to make spatial data management easier and more natural to users of location-enabled applications, geographic information system (GIS) applications, and geoimaging applications. After the spatial data is stored in an Oracle Database, you can easily manipulate, retrieve, and relate it to all the other data stored in the database. The following data types are available only if you have installed Oracle Spatial. SDOGEOMETRY The geometric description of a spatial object is stored in a single row, in a single column of object type SDOGEOMETRY in a user-defined table. Any table that has a column of type SDOGEOMETRY must have another column, or set of columns, that defines a unique primary key for that table. Tables of this sort are sometimes called geometry tables. The SDOGEOMETRY object type has the following definition: SDOTOPOGEOMETRY This type describes a topology geometry, which is stored in a single row, in a single column of object type SDOTOPOGEOMETRY in a user-defined table. The SDOTOPOGEOMETRY object type has the following definition: SDOGEORASTER In the GeoRaster object-relational model, a raster grid or image object is stored in a single row, in a single column of object type SDOGEORASTER in a user-defined table. Tables of this sort are called GeoRaster tables. The SDOGEORASTER object type has the following definition: Media Types Oracle Multimedia uses object types, similar to Java or C classes, to describe multimedia data. An instance of these object types consists of attributes, including metadata and the media data, and methods. The Multimedia data types are created in the ORDSYS schema. Public synonyms exist for all the data types, so you can access them without specifying the schema name. Oracle Multimedia provides the following object types: Supports the storage and management of audio data. Supports the storage and management of Digital Imaging and Communications in Medicine (DICOM), the format universally recognized as the standard for medical imaging. Supports storage and management of any type of media data, including audio, image and video data. Use this type when you want all media to be stored in a single column. Supports the storage and management of image data. Supports the storage and management of video data. The ORDImageSignature object type has been deprecated and should no longer be introduced into your code. Existing occurrences of this object type will continue to function as in the past. The following data types provide compliance with the ISO-IEC 13249-5 Still Image standard, commonly referred to as SQLMM StillImage: Represents a feature that characterizes an image by its average color. Encapsulates color values. Represents a feature that characterizes an image by the relative frequencies of the colors exhibited by samples of the raw image. A list containing up to four of the image features represented by the preceding object types ( SIAverageColor. SIColorHistogram. SIPositionalColor. and SITexture ), where each feature is associated with a feature weight. Given an image divided into n by m rectangles, the SIPositionalColor object type represents the feature that characterizes an image by the n by m most significant colors of the rectangles. Represents digital images with inherent image characteristics such as height, width, and format. Represents a feature that characterizes an image by the size of repeating items (coarseness), brightness variations (contrast), and predominant direction (directionality). Oracle Multimedia Reference for information on all other object types listed in this section Expression Filter Type The Oracle Expression Filter allows application developers to manage and evaluate conditional expressions that describe users interests in data. The Expression Filter includes the following data type: Expression Expression Filter uses a virtual data type called Expression to manage and evaluate conditional expressions as data in database tables. The Expression Filter creates a column of Expression data type from a VARCHAR2 column by assigning an attribute set to the column. This assignment enables a data constraint that ensures the validity of expressions stored in the column. You can define conditions using the EVALUATE operator on an Expression data type to evaluate the expressions stored in a column for some data. If you are using Enterprise Edition, then you can also define an Expression Filter index on a column of Expression data type to process queries using the EVALUATE operator. DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows Motivation Develop skills on this topic This content is part of a progressive knowledge path for advancing your skills. See DB2 fundamentals for Oracle professionals: Migrating from Oracle to DB2 In March 2009 at a Cebit presentation I held on DB2, I burned out a 110V computer loudspeaker that I had thoughtlessly hooked up to Germanys 230V power grid without using a transformer. On that same trip, I also destroyed the charger for my electric toothbrush and my beard clipper in similar incidents. Given my inability to learn from mistakes, it comes as no surprise that one of my favorite sayings (origin unknown) is this: The problem with standards is that there are so many of them. In the world of relational database management systems (RDBMS), we are blessed with at least three major standards and countless variations on those: ANSI SQL and ANSI SQLPSM Oracle SQL and PLSQL Sybase and Microsoft174 TSQL Figure 1 illustrates with a Venn diagram how the SQL dialects overlap. Figure 1. Babylonian confusion of SQL Whenever you write an application, you have to make the choice of which RDBMS vendor to utilize. Once you have made that choice, you are essentially committed. Any attempt to switch vendors to take advantage of lower prices, better technology, or a better partnership is thwarted by legacy code that requires extensive rewrite before it can be used with another RDBMS. In addition, your skill set cannot be transferred from one product to another as easily as you would expect. IBM174 DB2174 10 for Linux174, UNIX174, and Windows174 (DB2) dramatically lowers the barriers for applications written for Oracle when enabling them to DB2. This provides customers and vendors the ability to choose a DBMS based on its merits rather than application history. DB2 10 includes Oracle compatibility features To allow an application written for one RDBMS to run on another virtually unchanged, many pieces have to fall into place. Different locking mechanisms, data types, SQL, procedural language residing on the server, and even the client interfaces used by the application itself need to be aligned not only in syntax but also in semantics. All of these steps have been taken in DB2. Changes are the exception, not the rule (you can rapidly assess the application changes needed). Table 1 provides a quick overview of commonly used features. Table 1. Commonly used features It turns out that there is no semantic reason why a transaction running under CS isolation waits for outcome when encountering a changed row. An equally satisfactory behavior is to read the currently committed version of the changed row. This behavior has been implemented since DB2 9.7. What happens is that DB2 simply retrieves the currently committed version of a locked row from the log. In most common cases, the row is still in the log buffer because the change has not been committed yet. But even if the row has been written out and has also been overwritten in the log buffer DB2 knows exactly where to find it, so that a single IO will bring the desired version into the bufferpool. As shown in Figure 2, imagine a user updating a name in an employee table. Before that user has committed the change another user scans that table. Traditionally, the second user would have had to wait for the first user to commit or rollback. Thanks to read currently committed data, the scan for the second user will simply retrieve the version of the row from the log buffer which that does not contain the first users changes. Figure 2. Writers dont block readers It is important to note that this behavior: Introduces no new objects such as a rollback segment. Has no performance overhead for the writer since the log needs to be written anyway. Cannot cause any situation such as a snapshot too old because in the extremely unlikely event that the log file needed has been archived (while a transaction was still open), DB2 will simply fall back and wait for the lock to go away. In addition to these changes, additional lock avoidance techniques have been introduced into DB2 to eliminate a reader holding a lock under CS isolation. Table 4 shows the new concurrency behavior DB2 has with CS. Table 4. New DB2 concurrency behavior with CS As you can see, the concurrency behavior is now identical to that of Oracle. In fact, any DB2 database created since DB2 9.7 exhibits this behavior by default. New data types The heart of every database is its data. Mismatched types or mismatched semantics of these types can seriously impact the ability to enable an application to another RDBMS. So to allow Oracle applications to run on DB2, it is crucial to support its non-standard basic types, such as strings, dates, and numerics. Beyond aligning these basic types, there are other more complex types that are commonly used in Oracles PLSQL that are available since DB2 9.7, as shown in Table 5. Table 5. New DB2 data types Support for NUMBER and NUMBER(p , s) has been added based on DECFLOAT (with Power hardware acceleration) and DECIMAL. The VARCHAR2-type behavior includes empty strings being interpreted as NULL and trailing blank sensitive collation. NCHAR, NVARCHAR2, and NCLOB The National Character types provide double-byte string support for Unicode databases. A database in Oracle DATE mode includes the TIME component in addition to the calendar date. The scale of fractions of seconds can be chosen between 0 (date time) up to 12 (pico seconds). This type can be used in procedural logic, variables, and parameters to routines. The ARRAY support in procedures has been extended to support VARRAY style methods and syntax. In addition to regular arrays, DB2 also supports associative arrays. This composite type can be used in variables and parameters, and as an element to arrays and associative arrays. Ref Cursor type Cursors can be assigned to variables or passed around using parameters. Implicit casting and type resolution If it walks like a duck, and it talks like a duck, then it must be a duck. This is the mantra of many of the new languages such as PHP and Ruby. Every literal is a string and then gets used as another type based on context. In adherence with the SQL standard and following a philosophy that a type mismatch is likely an indication of a coding mistake, DB2 has traditionally followed strong typing rules, where strings and numerics cannot be compared unless one is explicitly cast to the other. Unfortunately, when an Oracle application uses weak typing in its SQL, that application would have previously failed to compile against DB2. Since DB2 9.7, implicit casting (or weak typing) has been the default. That is, strings and numbers can be compared, assigned, and operated on in a very flexible fashion. In addition, untyped NULLs can be used in many more places, while untyped parameter markers can be used nearly anywhere, thanks to deferred prepare . That is, DB2 will not resolve the type of a parameter marker until it has seen the first actual value. To round out implicit casting, DB2 also supports defaulting of routine parameters as well as the association of arguments to parameters by name. Extended built-in function library in DB2 All RDBMs provide libraries of functions to operate on the data. The problem is that no two use the same names for these functions, even if in the end the functionality is very similar. In addition to its own traditional set of functions, DB2 now supports a library compatible with Oracle. The following list provides a quick overview, but it is by no means an exhaustive list: Conversion and cast functions TODATE TOCHAR TOCLOB TONUMBER TOSINGLEBYTE TOTIMESTAMP Each of these functions supports a rich set of compatible formatting strings. The greatly increased overlap in supported functions between the two products implies a greatly improved out-of-the-box success, enabling an Oracle application to DB2. Oracle SQL dialect support This article, so far, has covered concurrency, data types, typing, and functions. But the differences between Oracle and DB2 go deeper than this. The very fabric of the SQL dialects, their keywords and semantics differ in some areas. Also each product supports some features that the other simply does not. When these features are popular, they limit the ability to submit common SQL against both products, which can prompt many small and big language tweaks. Table 6 lists some highlights. Table 6. New SQL support

No comments:

Post a Comment