DB2 - Exemplos simples - INSERT INTO SELECT



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

DB2 - Exemplos simples - INSERT INTO SELECT

Copies data from one table into another table
Copia dados de uma tabela para outra

One use for this kind of INSERT statement is to move data into a table you created for summary data.
For example, suppose you want a table that shows each employee's time commitments to projects.
Create a table called EMPTIME with the columns EMPNUMBER, PROJNUMBER, STARTDATE, and ENDDATE and then use the following INSERT statement to fill the table:

Um uso para esse tipo de instrução INSERT é mover dados para uma tabela que você criou para dados de resumo.
Por exemplo, suponha que você queira uma tabela que mostre os compromissos de tempo de cada funcionário com os projetos.
Crie uma tabela chamada EMPTIME com as colunas EMPNUMBER, PROJNUMBER, STARTDATE e ENDDATE e, em seguida, use a seguinte instrução INSERT para preencher a tabela:

    INSERT INTO CORPDATA.EMPTIME
          (EMPNUMBER
    ,      PROJNUMBER
    ,      STARTDATE
    ,      ENDDATE)
           SELECT EMPNO
           ,      PROJNO
           ,      EMSTDATE
           ,      EMENDATE
             FROM CORPDATA.EMPPROJACT

The select-statement embedded in the INSERT statement is no different from the select-statement you use to retrieve data.
With the exception of FOR READ ONLY, FOR UPDATE, or the OPTIMIZE clause, you can use all the keywords, functions, and techniques used to retrieve data.
SQL inserts all the rows that meet the search conditions into the table you specify.
Inserting rows from one table into another table does not affect any existing rows in either the source table or the target table.

A instrução select incorporada na instrução INSERT não é diferente da instrução select que você usa para recuperar dados.
Com exceção de FOR READ ONLY, FOR UPDATE ou a cláusula OPTIMIZE, você pode usar todas as palavras-chave, funções e técnicas usadas para recuperar dados.
O SQL insere todas as linhas que atendem às condições de pesquisa na tabela que você especificar.
A inserção de linhas de uma tabela em outra não afeta as linhas existentes na tabela de origem ou na tabela de destino.

You should consider the following when inserting multiple rows into a table:
Você deve considerar o seguinte ao inserir várias linhas em uma tabela:

Notes:

  1. The number of columns implicitly or explicitly listed in the INSERT statement must equal the number of columns listed in the select-statement.
  2. The data in the columns you are selecting must be compatible with the columns you are inserting into when using the INSERT with select-statement.
  3. In the event the select-statement embedded in the INSERT returns no rows, an SQLCODE of 100 is returned to alert you that no rows were inserted.
    If you successfully insert rows, the SQLERRD(3) field of the SQLCA has an integer representing the number of rows SQL actually inserted.
    This value is also available from the ROW_COUNT diagnostics item in the GET DIAGNOSTICS statement.
  4. If SQL finds an error while running the INSERT statement, SQL stops the operation.
    If you specify COMMIT (*CHG), COMMIT(*CS), COMMIT (*ALL), or COMMIT(*RR), nothing is inserted into the table and a negative SQLCODE is returned.
    If you specify COMMIT(*NONE), any rows inserted before the error remain in the table.

Notas:

  1. O número de colunas implícita ou explicitamente listadas na instrução INSERT deve ser igual ao número de colunas listadas na instrução select.
  2. Os dados nas colunas que você está selecionando devem ser compatíveis com as colunas que você está inserindo ao usar o INSERT com a instrução select.
  3. No caso de a instrução select incorporada no INSERT não retornar nenhuma linha, um SQLCODE de 100 será retornado para alertá-lo de que nenhuma linha foi inserida.
    Se você inserir linhas com êxito, o campo SQLERRD (3) do SQLCA terá um número inteiro representando o número de linhas SQL realmente inseridas.
    Este valor também está disponível no item de diagnóstico ROW_COUNT na instrução GET DIAGNOSTICS.
  4. Se o SQL encontrar um erro ao executar a instrução INSERT, o SQL interromperá a operação.
    Se você especificar COMMIT (* CHG), COMMIT (* CS), COMMIT (* ALL) ou COMMIT (* RR), nada será inserido na tabela e um SQLCODE negativo será retornado.
    Se você especificar COMMIT (* NONE), todas as linhas inseridas antes do erro permanecerão na tabela.

The following SQL copies "Suppliers" into "Customers" (the columns that are not filled with data, will contain NULL):
O seguinte SQL copia "Fornecedores" em "Clientes" (as colunas que não são preenchidas com dados conterão NULL):

    INSERT INTO Customers 
          (CustomerName
    ,      City
    ,      Country)
           SELECT SupplierName
           ,      City
           ,      Country 
             FROM Suppliers;

The following SQL copies "Suppliers" into "Customers" (fill all columns):
O seguinte SQL copia "Fornecedores" em "Clientes" (preencha todas as colunas):

    INSERT INTO Customers 
          (CustomerName
    ,      ContactName
    ,      Address
    ,      City
    ,      PostalCode
    ,      Country)
           SELECT SupplierName
           ,      ContactName
           ,      Address
           ,      City
           ,      PostalCode
           ,      Country
             FROM Suppliers;

The following SQL copies only the German suppliers into "Customers":
O seguinte SQL copia apenas os fornecedores alemães em "Clientes":

    INSERT INTO Customers 
          (CustomerName
    ,      City
    ,      Country)
           SELECT SupplierName
           ,      City
           ,      Country
             FROM Suppliers
            WHERE Country = 'Germany';