2012-10-08 17 views
6

Soy nuevo en Oracle, He creado dos tablas mediante consultas siguientes,ORA-00907: falta el paréntesis correcto ¿Error al crear una tabla?

CREATE TABLE employee 
(
emp_name VARCHAR(20) NOT NULL, 
street VARCHAR(50) NOT NULL, 
city VARCHAR(20) NOT NULL, 
PRIMARY KEY(emp_name) 
) 

y

CREATE TABLE company 
(
comp_name VARCHAR(20) NOT NULL, 
city VARCHAR(20) NOT NULL, 
PRIMARY KEY(comp_name) 
) 

Ahora estoy tratando de crear otra tabla usando algunas claves externas,

CREATE TABLE works 
(
emp_name varchar(20) NOT NULL, 
comp_name varchar(20) NOT NULL, 
salary int(10) NOT NULL, 
FOREIGN KEY(emp_name) REFERENCES employee(emp_name), 
FOREIGN KEY(comp_name) REFERENCES company(comp_name) 
) 

Obteniendo ERROR: ORA-00907: falta el paréntesis de la derecha

también he tratado con

CREATE TABLE works 
(
emp_name varchar(20) NOT NULL, 
comp_name varchar(20) NOT NULL, 
salary int(10) NOT NULL, 
constraint wemployee FOREIGN KEY(emp_name) REFERENCES employee(emp_name), 
constraint wcompany FOREIGN KEY(comp_name) REFERENCES company(comp_name) 
) 

Sin embargo, conseguir el mismo error. ¿Alguien me puede decir que estoy cometiendo un error?

Respuesta

3

No soy experto en Oracle, pero ¿puede especificar el (10) en salary int(10) NOT NULL?

+0

¡Lo tengo hermano! Gracias :) @pilotcam – Nina

1

Al crear el índice en línea con el resto de la declaración de creación de la tabla intente poner la parte FOREIGN KEY:

CREATE TABLE works 
(
emp_name varchar(20) NOT NULL, 
comp_name varchar(20) NOT NULL, 
salary int(10) NOT NULL, 
emp_name REFERENCES employee(emp_name), 
comp_name REFERENCES company(comp_name) 
) 

Ver esta cuestión para más detalles:

ORA-00907: missing right parenthesis

+0

Obteniendo mismo error !. Gracias de todas formas. Obtuve una respuesta de Pilotcam. – Nina

1

mira aquí hay dos maneras diferentes de crear tablas con constriants.

1) crear departamento mesa ( deptno número (5) clave principal, varchar2 DEPTNAME (30), número empno (5) referencias emp (empno));

2) crear la tabla departamento ( deptno número (5), varchar2 deptname (30), número empno (5), restricción pkey_deptno clave primaria (deptno), restricción fkey_empno clave externa (empno) hace referencia a Emp (empno));

2

1: debe tener una tabla llamada "prueba" con dos columnas, id y testdata. (Esto es sólo un ejemplo rápido mudo, así que no voy a molestar para especificar ninguna restricción a las ID.)

create table test (id number, testdata varchar2(255)); 

2: A continuación vamos a crear una secuencia de utilizar para los números de identificación en nuestra tabla de prueba.

create sequence test_seq 
start with 1 
increment by 1 
nomaxvalue; 

Usted podría cambiar "comenzar con 1" a cualquier número que desea comenzar con (por ejemplo, si ya tiene 213 entradas en una tabla y desea comenzar a usar esto para su entrada 214a, reemplazar por "inicio con 214 "). La cláusula "incremento por 1" es la predeterminada, por lo que podría omitirla. También puede reemplazarlo por "incrementar en n" si desea omitir n-1 números entre los números de identificación. El "valor nomax" le dice que siga incrementándose para siempre en lugar de reiniciar en algún punto.i (estoy seguro de que Oracle tiene alguna limitación sobre lo grande que puede llegar, pero no sé cuál es ese límite).

3: Ahora estamos listos para crear el activador que insertará automáticamente el siguiente número de la secuencia en la columna de identificación.

create trigger test_trigger 
before insert on test 
for each row beginselect test_seq.nextval into :new.id from dual; 
end; 
/
Cuestiones relacionadas