Cambiando NULL a NOT NULL (o viceversa) en Teradata

La sintaxis para cambiar de NULL a NOT NULL una columna en Teradata tiene truco.

Digamos que tenemos una tabla:

 BTEQ -- Enter your DBC/SQL request or BTEQ command:
SHOW TABLE MY_DATABASE.PRUEBA01;

SHOW TABLE MY_DATABASE.PRUEBA01;

 *** Text of DDL statement returned.
 *** Total elapsed time was 1 second.

---------------------------------------------------------------

CREATE SET TABLE MY_DATABASE.PRUEBA01 ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT
     (
      ID_N1 INTEGER NOT NULL,
      TEXTO VARCHAR(8) CHARACTER SET LATIN NOT CASESPECIFIC)
PRIMARY INDEX ( ID_N1 );

Supongamos que queremos cambiar la columna TEXTO de NULL (como está) a NOT NULL.
Lo normal -sobre todo si venimos de Oracle- es que nos pase esto:

 BTEQ -- Enter your DBC/SQL request or BTEQ command:
ALTER TABLE MY_DATABASE.PRUEBA01 MODIFY TEXTO NOT NULL;

ALTER TABLE MY_DATABASE.PRUEBA01 MODIFY TEXTO NOT NULL;
 *** Failure 3707 Syntax error, expected something like a 'CHECK' keyword between the word 'TEXTO' and the 'NULL' keyword.
                Statement# 1, Info =52
 *** Total elapsed time was 1 second.

En efecto, en Teradata MODIFY es sólo para ‘check constraints’.

La solución es un poquillo rara:

ALTER TABLE MY_DATABASE.PRUEBA01 ADD TEXTO NOT NULL;

ALTER TABLE MY_DATABASE.PRUEBA01 ADD TEXTO NOT NULL;

 *** Table has been modified.
 *** Total elapsed time was 1 second.

SHOW TABLE MY_DATABASE.PRUEBA01;

 *** Text of DDL statement returned.
 *** Total elapsed time was 1 second.

----------------------------------------------------------------------

CREATE SET TABLE MY_DATABASE.PRUEBA01 ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT
     (
      ID_N1 INTEGER NOT NULL,
      TEXTO VARCHAR(8) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL)
PRIMARY INDEX ( ID_N1 );

Así es. Aunque utilizar ADD para modificar una columna pueda repugnar un poco, es así como se hace en Teradata.

En realidad ADD sirve para añadir o cambiar columnas en Teradata:

ADD column_name
data_type_declaration
data_type_attributes
column_storage_attributes
column_constraint_attributes

to add or change the specified column and its specified attributes.

Nota: Si la columna en cuestión está indexada no se puede cambiar de NULL a NOT NULL (o viceversa).

Saludos.

Carlos.

Anuncios

Una respuesta a Cambiando NULL a NOT NULL (o viceversa) en Teradata

  1. Roberto dice:

    SALUDOS.
    SOY NUEVO EN LINUX SUSE Y necesito por favor me ayuden en explicarme muy detalladamente como instalar oracle 10g en linux.

    gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: