CHAR B versus VARCHAR2 Semântica

Este apêndice explica as diferenças semânticas entre o CHAR e VARCHAR2 tipos de base. Estas diferenças subtis mas importantes entram em jogo quando você atribuir, comparar, inserir, atualizar, selecionar ou obter valores de caracteres.

Este apêndice discute os seguintes tópicos::

atribuir os valores dos caracteres comparando os valores dos caracteres inserindo os valores dos caracteres seleccionando os valores dos caracteres

atribuindo os valores dos caracteres

quando atribuir um valor dos caracteres a umCHAR variável, se o valor for mais curto do que o comprimento declarado da variável, PL/SQL coloca em branco o valor ao comprimento declarado. Então, a informação sobre os espaços em branco perdidos está perdida. No exemplo seguinte, o valor atribuído a last_name inclui seis espaços em branco, não apenas um:

last_name CHAR(10) := 'CHEN '; -- note trailing blank

Se o valor do caractere é maior do que o comprimento declarado da CHAR variável, PL/SQL, cancela a atribuição e levanta a predefinidos exceção de VALUE_ERROR. PL / SQL nem trunca o valor nem tenta aparar espaços em branco. Por exemplo, dada a declaração

acronym CHAR(4);

o seguinte atribuição levanta VALUE_ERROR:

acronym := 'SPCA '; -- note trailing blank

quando atribuir um valor de carácter a um VARCHAR2 variável, se o valor for inferior ao comprimento declarado da variável, PL/SQL nem espaços em branco o valor nem faixas em branco. Os valores dos caracteres são atribuídos intactos, de modo que nenhuma informação é perdida. Se o valor do caráter for maior do que o comprimento declarado do VARCHAR2 variável, PL/SQL aborta a atribuição e aumenta VALUE_ERROR. PL / SQL nem trunca o valor nem tenta aparar espaços em branco.

comparando valores de caracteres

pode usar os operadores relacionais para comparar valores de caracteres para igualdade ou desigualdade. Comparações são baseadas na sequência de colagem usada para o conjunto de caracteres do banco de dados. Um valor de caractere é maior do que outro se o segue na sequência de colagem. Por exemplo, dadas as declarações

last_name1 VARCHAR2(10) := 'COLES';last_name2 VARCHAR2(10) := 'COLEMAN';

a seguinte condição se for verdadeira:

IF last_name1 > last_name2 THEN ...

ANSI/ISO SQL requer que dois valores de caracteres sejam comparados com comprimentos iguais. Então, se ambos os valores em uma comparação têm datatype CHAR, semântica de preenchimento em branco são usados. Isto é, antes de comparar valores de caracteres de comprimento desigual, PL / SQL espaços em branco o valor mais curto para o comprimento do valor mais longo. Por exemplo, dadas as declarações

last_name1 CHAR(5) := 'BELLO';last_name2 CHAR(10) := 'BELLO '; -- note trailing blanks

seguinte IF condição for verdadeira:

IF last_name1 = last_name2 THEN ...

Se um valor em uma comparação tem o tipo de dados VARCHAR2 e não em branco-preenchimento semântica são utilizados. Isto é, ao comparar valores de caracteres de comprimento desigual, PL / SQL não faz ajustes e usa os comprimentos exatos. Por exemplo, dadas as declarações

last_name1 VARCHAR2(10) := 'DOW';last_name2 VARCHAR2(10) := 'DOW '; -- note trailing blanks

seguinte IF condição for falsa:

IF last_name1 = last_name2 THEN ...

Se um valor em uma comparação tem o tipo de dados VARCHAR2 e o outro, o valor de tipo de dados CHAR e não em branco-preenchimento semântica são utilizados. Mas, lembre-se, quando você atribui um valor de caractere a um CHAR variável, se o valor for menor do que o comprimento declarado da variável, PL/SQL branco-pads o valor ao comprimento declarado. Assim, tendo em conta as declarações

last_name1 VARCHAR2(10) := 'STAUB';last_name2 CHAR(10) := 'STAUB'; -- PL/SQL blank-pads value

seguinte IF condição é falsa, pois o valor de last_name2 inclui cinco espaços em branco à direita:

IF last_name1 = last_name2 THEN ...

Todos os literais de seqüência de caracteres de ter o tipo de dados CHAR. Então, se ambos os valores em uma comparação são literais, semântica de preenchimento em branco são usados. If one value is a literal, blank-padding semantics are used only if the other value has datatype CHAR.

inserir os valores dos caracteres

quando inserir o valor de uma variável de caracteres PL/SQL numa coluna de base de Dados Oracle, quer o valor seja preenchido em branco ou não depende do tipo de coluna, não do tipo variável.

quando introduz um valor de carácter numa coluna de base de dados CHAR, A Oracle não retira espaços em branco. Se o valor for menor que a largura definida da coluna, Oracle blank-pads o valor para a largura definida. Como resultado, a informação sobre os espaços em branco é perdida. Se o valor do caractere for maior que a largura definida da coluna, Oracle aborta a inserção e gera um erro.

quando introduz um valor de carácter numa coluna de base de dados VARCHAR2, A Oracle não retira espaços em branco. Se o valor for menor que a largura definida da coluna, Oracle não preenche o valor em branco. Os valores dos caracteres são armazenados intactos, de modo que nenhuma informação é perdida. Se o valor do caractere for maior que a largura definida da coluna, Oracle aborta a inserção e gera um erro.nota: ao actualizar aplicam-se as mesmas regras.

Ao inserir os valores dos caracteres, para garantir que não são armazenados espaços em branco, use a função RTRIM, que se sobrepõe aos espaços em branco. Segue-se um exemplo:

DECLARE ... my_name VARCHAR2(15);BEGIN ... my_ename := 'LEE '; -- note trailing blanks INSERT INTO emp VALUES (my_empno, RTRIM(my_ename), ...); -- inserts 'LEE'END;

seleccionando os valores dos caracteres

quando selecciona um valor de uma coluna de base de Dados Oracle para uma variável de caracteres PL/SQL, se o valor está em branco ou não depende do tipo de variável, não do tipo de coluna.

Quando seleccionar um valor da coluna numa variávelCHAR variável, se o valor for mais curto do que o comprimento declarado da variável, PL/SQL coloca em branco o valor ao comprimento declarado. Como resultado, a informação sobre os espaços em branco é perdida. Se o valor do caráter for maior do que o comprimento declarado da variável, PL/SQL aborta a atribuição e aumenta VALUE_ERROR.

Quando selecciona um valor da coluna numa variávelVARCHAR2 variável, se o valor for mais curto do que o comprimento declarado da variável, PL/SQL não cobre o valor nem elimina os espaços em branco. Os valores dos caracteres são armazenados intactos, de modo que nenhuma informação é perdida.

Por exemplo, quando selecciona uma variável ‘CHAR‘> valor da coluna num valorVARCHAR2 variável, os espaços em branco não são despojados. Se o valor do caráter for maior do que o comprimento declarado do VARCHAR2 variável, PL/SQL aborta a atribuição e aumenta VALUE_ERROR.Nota: as mesmas regras se aplicam ao obter.

Deixe uma resposta

O seu endereço de email não será publicado.