2012-01-19 10 views
10
ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2; 

¿Por qué no puedo usar la sintaxis mySql en Oracle también? El comando anterior funciona en MySql. ¿Puedes darme un equivalente que funcione?Modificar tabla tras palabra clave en Oracle


Error report: 
SQL Error: ORA-01735: invalid ALTER TABLE option 
01735. 00000 - "invalid ALTER TABLE option" 

estoy preguntando si hay alguna manera de usar después de la cláusula en el comando de Oracle que he proporcionado?

+2

¿Está pidiendo la sintaxis de corrent o está preguntando por qué? – cctan

+3

"¿Por qué no puedo usar la sintaxis mySql en Oracle también?". Por lo que sé. MySQL tiene una sintaxis SQL muy especial que los diferencia del resto. Casi todos los proveedores de bases de datos tienen una sintaxis cercana al estándar SQL pero no implementan el estándar SQL. Son casi todos diferentes. –

+0

@cctan: Agregué edición 2 como respuesta a tu pregunta –

Respuesta

18

Porque SQL es un álgebra relacional. No le importa ni un poco sobre las columnas "dónde" están ubicadas dentro de una tabla, solo que existen.

Para que funcione en Oracle, simplemente deshágase de la cláusula after. La documentación de Oracle para alter table es here sino que se reduce a:

alter table testTable 
    add (column1 number(1) default 0 not null) 

No hay after cláusula para el comando alter table.

+0

Quiero ser capaz de usar esa cláusula, sin volver a crear la tabla –

+7

@ Floradu88, entonces necesitas hablar con Oracle, nosotros no. No soy tan cercano a Larry :-) – paxdiablo

+0

¿Entonces no se puede hacer? –

1

Prueba esto:

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL 
12

Oracle no admite la adición de columnas en el centro de una mesa, solamente la adición de ellos hasta el final. El diseño de la base de datos y la funcionalidad de la aplicación no deben depender del orden de las columnas en el esquema de la base de datos. Siempre puedes especificar un orden en tu declaración seleccionada, después de todo.

Sin embargo, si por alguna razón simplemente debe tener una nueva columna en el medio de su tabla, hay un problema.

CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1; 
DROP TABLE tab1 PURGE; 
RENAME tan1New to tab1; 

Cuando el SELECT 0 AS col1 es su nueva columna y luego se especifica otras columnas según sea necesario de la tabla original. Coloque el SELECT 0 AS col1 en el lugar apropiado en el orden que desee.

A continuación, puede ejecutar una declaración alter table en la columna para asegurarse de que es el tipo de datos que desea.