Oracle: CTAS com alteração de DATATYPE

A forma mais rápida de ser fazer algo, é… não fazer.

Esta é uma frase que li de Tom Kyte, que sempre prova-se verdadeira.

Vai apagar 1 milhão de linhas de uma tabela que tem 10 milhões de linhas? Um CTAS (Create Table As Select) certamente será mais rápido que o DELETE. O mesmo se aplica para INSERTs e UPDATEs em massa.

Você ainda pode combinar o CTAS com PARALLEL e NOLOGGING, já que trata-se de uma ação pontual e controlada pelo DBA.

Como todo CREATE TABLE, o CTAS obviamente irá requerer que as CONSTRAINTs e INDEXes sejam criados depois. Mas acredite, mesmo assim você terá um bom ganho.

Se você precisar também alterar o DATATYPE durante o CTAS, isto é possível utilizando esta segunda sintaxe abaixo, com CAST. Será mais rápido do que alterar a coluna depois.

SQL> DESC ALL_USERS;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USERNAME                                  NOT NULL VARCHAR2(128)
 USER_ID                                   NOT NULL NUMBER
 CREATED                                   NOT NULL DATE
 COMMON                                             VARCHAR2(3)
 ORACLE_MAINTAINED                                  VARCHAR2(1)

SQL> CREATE TABLE USERS_TESTE_1 AS SELECT USERNAME, USER_ID, CREATED, COMMON, ORACLE_MAINTAINED FROM ALL_USERS;

Table created.

SQL> CREATE TABLE USERS_TESTE_2 AS SELECT USERNAME, USER_ID, CREATED, COMMON, CAST(ORACLE_MAINTAINED AS CHAR(1)) ORACLE_MAINTAINED FROM ALL_USERS;

Table created.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.