DB2 12 - Restrictions when assigning values to columns with distinct types


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 12 - Restrições ao atribuir valores a colunas com tipos distintos - Restrictions when assigning values to columns with distinct types

Certas condições são necessárias quando você atribui um valor de coluna a outra coluna ou quando você atribui uma constante a uma coluna de um tipo distinto.
Se as condições não forem atendidas, você não poderá atribuir o valor.
Certain conditions are required when you assign a column value to another column or when you assign a constant to a column of a distinct type.
If the conditions are not met, you cannot assign the value.

Ao atribuir um valor de coluna a outra coluna ou uma constante a uma coluna de um tipo distinto, o tipo do valor a ser atribuído deve corresponder ao tipo de coluna ou você deve ser capaz de converter um tipo para o outro.
Caso contrário, você não pode atribuir o valor.
When assigning a column value to another column or a constant to a column of a distinct type, the type of the value that is to be assigned must match the column type, or you must be able to cast one type to the other.
Otherwise, you cannot assign the value.

Se você precisar atribuir um valor de um tipo distinto a uma coluna de outro tipo distinto, deve existir uma função que converta o valor de um tipo em outro.
Como o Db2 fornece funções de conversão apenas entre tipos distintos e seus tipos de origem, você deve escrever a função para converter de um tipo distinto para outro.
If you need to assign a value of one distinct type to a column of another distinct type, a function must exist that converts the value from one type to another.
Because Db2 provides cast functions only between distinct types and their source types, you must write the function to convert from one distinct type to another.

Atribuição de valores de coluna a colunas com diferentes tipos distintos - Assigning column values to columns with different distinct types

Suponha que as tabelas JAPAN_SALES e JAPAN_SALES_03 sejam definidas assim:
Suppose tables JAPAN_SALES and JAPAN_SALES_03 are defined like this:


CREATE TABLE JAPAN_SALES
  (PRODUCT_ITEM  INTEGER,
   MONTH         INTEGER CHECK (MONTH BETWEEN 1 AND 12),
   YEAR          INTEGER CHECK (YEAR > 1990),
   TOTAL         JAPANESE_YEN);
 
CREATE TABLE JAPAN_SALES_03
  (PRODUCT_ITEM  INTEGER,
   TOTAL         US_DOLLAR);

Você precisa inserir valores da coluna TOTAL em JAPAN_SALES na coluna TOTAL de JAPAN_SALES_03.
Como as instruções INSERT seguem regras de atribuição, o Db2 não permite inserir os valores diretamente de uma coluna para a outra porque as colunas são de tipos distintos diferentes.
Suponha que uma função definida pelo usuário chamada US_DOLLAR tenha sido escrita e aceita valores do tipo JAPANESE_YEN como entrada e retorna valores do tipo US_DOLLAR.
Você pode então usar esta função para inserir valores na tabela JAPAN_SALES_03:

You need to insert values from the TOTAL column in JAPAN_SALES into the TOTAL column of JAPAN_SALES_03.
Because INSERT statements follow assignment rules, Db2 does not let you insert the values directly from one column to the other because the columns are of different distinct types.
Suppose that a user-defined function called US_DOLLAR has been written that accepts values of type JAPANESE_YEN as input and returns values of type US_DOLLAR.
You can then use this function to insert values into the JAPAN_SALES_03 table:

INSERT INTO JAPAN_SALES_03
  SELECT PRODUCT_ITEM, US_DOLLAR(TOTAL)
  FROM JAPAN_SALES
  WHERE YEAR = 2003;

Atribuição de valores de coluna com tipos distintos para variáveis host - Assigning column values with distinct types to host variables

As regras para atribuir tipos distintos a variáveis ??de host ou variáveis ??de host a colunas de tipos distintos diferem das regras para constantes e colunas.
The rules for assigning distinct types to host variables or host variables to columns of distinct types differ from the rules for constants and columns.

Você pode atribuir um valor de coluna de um tipo distinto a uma variável de host se puder atribuir um valor de coluna do tipo de origem do tipo distinto à variável de host.
No exemplo a seguir, você pode atribuir SIZECOL1 e SIZECOL2, que tem tipo distinto SIZE, a variáveis ??de host do tipo double e short porque o tipo de origem de SIZE, que é INTEGER, pode ser atribuído a variáveis ??de host do tipo double ou short.

You can assign a column value of a distinct type to a host variable if you can assign a column value of the distinct type's source type to the host variable.
In the following example, you can assign SIZECOL1 and SIZECOL2, which has distinct type SIZE, to host variables of type double and short because the source type of SIZE, which is INTEGER, can be assigned to host variables of type double or short.

EXEC SQL BEGIN DECLARE SECTION;
  double hv1;
  short  hv2;
EXEC SQL END DECLARE SECTION;
CREATE DISTINCT TYPE SIZE AS INTEGER;
CREATE TABLE TABLE1 (SIZECOL1 SIZE, SIZECOL2 SIZE);
?
SELECT SIZECOL1, SIZECOL2
  INTO :hv1, :hv2
  FROM TABLE1;

Atribuição de valores de variáveis ??de host a colunas com tipos distintos - Assigning host variable values to columns with distinct types

Quando você atribui um valor em uma variável de host a uma coluna com um tipo distinto, o tipo da variável de host deve ser capaz de converter para o tipo distinto.
When you assign a value in a host variable to a column with a distinct type, the type of the host variable must be able to cast to the distinct type.

Neste exemplo, os valores da variável do host hv2 podem ser atribuídos às colunas SIZECOL1 e SIZECOL2, porque o tipo de dados C short é equivalente ao tipo de dados Db2 SMALLINT e SMALLINT pode ser promovido para o tipo de dados INTEGER.
No entanto, os valores de hv1 não podem ser atribuídos a SIZECOL1 e SIZECOL2, porque o tipo de dados C double, que é equivalente ao tipo de dados Db2 DOUBLE, não pode ser promovido para o tipo de dados INTEGER.

In this example, values of host variable hv2 can be assigned to columns SIZECOL1 and SIZECOL2, because C data type short is equivalent to Db2 data type SMALLINT, and SMALLINT is promotable to data type INTEGER.
However, values of hv1 cannot be assigned to SIZECOL1 and SIZECOL2, because C data type double, which is equivalent to Db2 data type DOUBLE, is not promotable to data type INTEGER.

EXEC SQL BEGIN DECLARE SECTION;
  double hv1;
  short  hv2;
EXEC SQL END DECLARE SECTION;
CREATE DISTINCT TYPE SIZE AS INTEGER;
CREATE TABLE TABLE1 (SIZECOL1 SIZE, SIZECOL2 SIZE);
?
INSERT INTO TABLE1
  VALUES (:hv1,:hv1);     /* Invalid statement */
INSERT INTO TABLE1
  VALUES (:hv2,:hv2);     /* Valid statement   */

Tópico pai: Inserting rows by using the INSERT statement



© Copyright IBM Corp.