DB2 for z/OS - Distinct type comparisons - Comparações de tipos distintos


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES, Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

DB2 for z/OS - Distinct type comparisons - Comparações de tipos distintos

A value with a distinct type can only be compared to another value with exactly the same type because distinct types have strong typing, which means that a distinct type is compatible only with its own type.

Um valor com um tipo distinto só pode ser comparado a outro valor com exatamente o mesmo tipo porque tipos distintos têm tipificação forte, o que significa que um tipo distinto é compatível apenas com seu próprio tipo.

To compare a distinct type to a value with a different data type, the distinct type value must be cast to the data type of the comparison value or the comparison value must be cast to the distinct type.
For example, because constants are built-in data types, a constant can be compared to a distinct type value only if it is first cast to the distinct type or vice versa.

Para comparar um tipo distinto a um valor com um tipo de dados diferente, o valor do tipo distinto deve ser convertido para o tipo de dados do valor de comparação ou o valor de comparação deve ser convertido para o tipo distinto.
Por exemplo, como as constantes são tipos de dados internos, uma constante pode ser comparada a um valor de tipo distinto apenas se for convertida primeiro para o tipo distinto ou vice-versa.

The following table shows examples of valid and invalid comparisons, assuming the following SQL statements were used to define two distinct types AGE_TYPE and CAMP_DATE and table CAMP_ROSTER table.

A tabela a seguir mostra exemplos de comparações válidas e inválidas, assumindo que as seguintes instruções SQL foram utilizadas para definir dois tipos distintos AGE_TYPE e CAMP_DATE e a tabela CAMP_ROSTER.


    CREATE TYPE AGE_TYPE AS INTEGER;
    CREATE TYPE CAMP_DATE AS DATE;
    CREATE TABLE CAMP_ROSTER
       ( NAME                VARCHAR(20),
         ATTENDEE_NUMBER     INTEGER NOT NULL,
         AGE                 AGE_TYPE,
         FIRST_CAMP_DATE     CAMP_DATE,
         LAST_CAMP_DATE      CAMP_DATE,
         BIRTHDATE           DATE);

Table 1. Examples of valid and invalid comparisons involving distinct types - Exemplos de comparações válidas e inválidas envolvendo tipos distintos

Instrução SQL Válido Reason - Razão
Distinct types with distinct types - Tipos distintos com tipos distintos
SELECT * 
FROM   CAMP_ROSTER
WHERE  FIRST_CAMP_DATE < LAST_CAMP_DATE;
Yes Both values are the same distinct type.

Ambos os valores são do mesmo tipo distinto.
Distinct types with columns of the same source data type - Tipos distintos com colunas do mesmo tipo de dados de origem
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE > ATTENDEE_NUMBER;
No A distinct type cannot be compared to integer.

Um tipo distinto não pode ser comparado ao inteiro.
SELECT * 
FROM   CAMP_ROSTER
WHERE  INTEGER(AGE) > ATTENDEE_NUMBER;
SELECT * 
FROM   CAMP_ROSTER
WHERE  CAST(AGE AS INTEGER) > ATTENDEE_NUMBER;
Yes The distinct type is cast to an integer, making the comparison of two integers.

O tipo distinto é convertido em um inteiro, fazendo a comparação de dois inteiros.
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE > AGE_TYPE(ATTENDEE_NUMBER);
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE > CAST(ATTENDEE_NUMBER as AGE_TYPE);
Yes Integer ATTENDEE_NUMBER is cast to the distinct type AGE_TYPE, making both values the same distinct type.

O número inteiro ATTENDEE_NUMBER é convertido para o tipo distinto AGE_TYPE, tornando ambos os valores do mesmo tipo distinto.
Distinct types with constants - Tipos distintos com constantes
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE IN (15,16,17);
No A distinct type cannot be compared to a constant.

Um tipo distinto não pode ser comparado a uma constante.
SELECT * 
FROM   CAMP_ROSTER
WHERE  INTEGER(AGE) IN (15,16,17);
Yes The distinct type is cast to the data type of constants, making all the values in the comparison integers.

O tipo distinto é convertido para o tipo de dados de constantes, tornando todos os valores nos inteiros de comparação.
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE IN
      (AGE_TYPE(15),AGE_TYPE(16),AGE_TYPE(17));
Yes Constants are cast to distinct type AGE_TYPE, making all the values in the comparison the same distinct type.

As constantes são convertidas em tipos distintos AGE_TYPE, tornando todos os valores na comparação do mesmo tipo distinto.
SELECT * 
FROM   CAMP_ROSTER
WHERE  FIRST_CAMP_DATE > '06/12/99';
No A distinct type cannot be compared to a constant.

Um tipo distinto não pode ser comparado a uma constante.
SELECT * 
FROM   CAMP_ROSTER
WHERE  FIRST_CAMP_DATE >
       CAST('06/12/99' AS CAMP_DATE);
No The string constant '06/12/99', a VARCHAR data type, cannot be cast directly to distinct type CAMP_DATE, which is based on a DATE data type.
As illustrated in the next row, the constant must be cast to a DATE data type and then to the distinct type.

A constante de string '06 / 12/99 ', um tipo de dados VARCHAR, não pode ser convertida diretamente para o tipo distinto CAMP_DATE, que é baseado em um tipo de dados DATE.
Conforme ilustrado na próxima linha, a constante deve ser convertida em um tipo de dados DATE e, em seguida, em um tipo distinto.
SELECT * 
FROM   CAMP_ROSTER
WHERE  FIRST_CAMP_DATE >
       CAST(DATE('06/12/1999') AS CAMP_DATE); 
Yes The string constant '06/12/99' is cast to the distinct type CAMP_DATE, making both values the same distinct type.
To cast a string constant to a distinct type that is based on a DATE, TIME, or TIMESTAMP data type, the string constant must first be cast to a DATE, TIME, or TIMESTAMP data type.

A constante de string '06 / 12/99 'é convertida para o tipo distinto CAMP_DATE, tornando ambos os valores do mesmo tipo distinto.
Para converter uma constante de string em um tipo distinto baseado em um tipo de dados DATE, TIME ou TIMESTAMP, a constante de string deve primeiro ser convertida em um tipo de dados DATE, TIME ou TIMESTAMP.
Distinct types with host variables - Tipos distintos com variáveis de host
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE BETWEEN :HV_INTEGER AND :HV_INTEGER2;
No The host variables have integer data types.
A distinct type cannot be compared to an integer.

As variáveis do host têm tipos de dados inteiros.
Um tipo distinto não pode ser comparado a um inteiro.
SELECT * 
FROM   CAMP_ROSTER
WHERE  AGE    BETWEEN CAST(:HV_INTEGER AS AGE_TYPE)
AND    AGE_TYPE(:HV_INTEGER2);
Yes The host variables are cast to distinct type AGE_TYPE, making all the values the same distinct type.

As variáveis do host são convertidas em um tipo distinto AGE_TYPE, tornando todos os valores do mesmo tipo distinto.
SELECT * 
FROM   CAMP_ROSTER
WHERE  FIRST_CAMP_DATE > :HV_VARCHAR;
No The host variable has a VARCHAR data type.
A distinct type cannot be compared to a VARCHAR.

A variável do host possui um tipo de dados VARCHAR.
Um tipo distinto não pode ser comparado a um VARCHAR.
SELECT * 
FROM   CAMP_ROSTER
WHERE  FIRST_CAMP_DATE >
       CAST(DATE(:HV_VARCHAR) AS CAMP_DATE);
Yes The host variable is cast to the distinct type CAMP_DATE, making both values the same distinct type.
To cast a VARCHAR host variable to a distinct type that is based on a DATE, TIME, or TIMESTAMP data type, the host variable must first be cast to a DATE, TIME, or TIMESTAMP data type.

A variável do host é convertida para o tipo distinto CAMP_DATE, tornando ambos os valores do mesmo tipo distinto.
Para converter uma variável de host VARCHAR em um tipo distinto baseado em um tipo de dados DATE, TIME ou TIMESTAMP, a variável de host deve primeiro ser convertida em um tipo de dados DATE, TIME ou TIMESTAMP.


© Copyright IBM Corp.