Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

[SOLUCIONADO] problema al crear una tabla

Estas en el tema de problema al crear una tabla en el foro de Oracle en Foros del Web. buenas, tengo un problema al crear una tabla. la query que uso es: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE TABLE Restaurante ( id INTEGER ...
  #1 (permalink)  
Antiguo 19/12/2012, 08:25
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
problema al crear una tabla

buenas, tengo un problema al crear una tabla. la query que uso es:
Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id INTEGER IDENTITY PRIMARY KEY,
  4. nombre VARCHAR(60) NOT NULL,
  5. direccion VARCHAR(100) NOT NULL,
  6. coord_X FLOAT,
  7. coord_Y FLOAT,
  8. puntuacion FLOAT
  9. );

pero me da el siguiente error al ejecutarla:

ORA-00907: missing right parenthesis

he probado también poniendole al identity (1,1) y nada

Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id INTEGER IDENTITY(1,1) PRIMARY KEY,
  4. nombre VARCHAR(60) NOT NULL,
  5. direccion VARCHAR(100) NOT NULL,
  6. coord_X FLOAT,
  7. coord_Y FLOAT,
  8. puntuacion FLOAT
  9. );
alguien me puede dar una solución??

Última edición por gnzsoloyo; 07/01/2013 a las 12:13
  #2 (permalink)  
Antiguo 19/12/2012, 08:47
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: problema al crear una tabla

Cita:
Iniciado por educdd Ver Mensaje
buenas, tengo un problema al crear una tabla. la query que uso es:

CREATE TABLE Restaurante
(
id INTEGER IDENTITY PRIMARY KEY,
nombre VARCHAR(60) NOT NULL,
direccion VARCHAR(100) NOT NULL,
coord_X FLOAT,
coord_Y FLOAT,
puntuacion FLOAT
);

pero me da el siguiente error al ejecutarla:

ORA-00907: missing right parenthesis

he probado también poniendole al identity (1,1) y nada

Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id INTEGER IDENTITY(1,1) PRIMARY KEY,
  4. nombre VARCHAR(60) NOT NULL,
  5. direccion VARCHAR(100) NOT NULL,
  6. coord_X FLOAT,
  7. coord_Y FLOAT,
  8. puntuacion FLOAT
  9. );

alguien me puede dar una solución??
Prueba asi:

Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id INT IDENTITY(1,1) PRIMARY KEY,
  4. nombre VARCHAR(60) NOT NULL,
  5. direccion VARCHAR(100) NOT NULL,
  6. coord_X FLOAT,
  7. coord_Y FLOAT,
  8. puntuacion FLOAT
  9. );
__________________
Aviso: No se resuelven dudas por MP!

Última edición por gnzsoloyo; 07/01/2013 a las 12:12
  #3 (permalink)  
Antiguo 19/12/2012, 09:01
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

Malenko gracias por tu pronta respuesta pero... seguimos en las mismas!!
  #4 (permalink)  
Antiguo 19/12/2012, 09:17
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: problema al crear una tabla

Pues yo acabo de ejecutar la consulta en un SQL Server y la tabla se ha creado correctamente :S
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 19/12/2012, 09:24
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: problema al crear una tabla

Es verdad lo que dice malenko,

Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id INTEGER IDENTITY PRIMARY KEY,
  4. nombre VARCHAR(60) NOT NULL,
  5. direccion VARCHAR(100) NOT NULL,
  6. coord_X FLOAT,
  7. coord_Y FLOAT,
  8. puntuacion FLOAT
  9. );

acabo de ejecutar la misma query en el sql y la crea correctamente, tal vez algún error del sql? intenta cerrando el sql y abriendolo otra vez, la verdad no se que puede ser :S pero la query esta hecha correctamente ;)

Última edición por gnzsoloyo; 07/01/2013 a las 12:12
  #6 (permalink)  
Antiguo 19/12/2012, 09:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: problema al crear una tabla

Cita:
Iniciado por Malenko Ver Mensaje
Pues yo acabo de ejecutar la consulta en un SQL Server y la tabla se ha creado correctamente :S
Lo que pasa es que estoy usando mysql :S..........apuestas a que esta es la respuesta del que pregunta??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 19/12/2012, 09:45
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: problema al crear una tabla

Cita:
Iniciado por Libras Ver Mensaje
Lo que pasa es que estoy usando mysql :S..........apuestas a que esta es la respuesta del que pregunta??
Me imaginaba que por ahí iban los tiros, por eso lo he puesto en negrita. Deducía que trabajabas con SQL Server porque pusiste la consulta en SQL Server y no en MySQL
__________________
Aviso: No se resuelven dudas por MP!
  #8 (permalink)  
Antiguo 19/12/2012, 09:51
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: problema al crear una tabla

A ver si con esto...
Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id INT AUTO_INCREMENT,
  4. nombre VARCHAR(60) NOT NULL,
  5. direccion VARCHAR(100) NOT NULL,
  6. coord_X FLOAT,
  7. coord_Y FLOAT,
  8. puntuacion FLOAT,
  9. PRIMARY KEY(id)
  10. );
__________________
Aviso: No se resuelven dudas por MP!

Última edición por gnzsoloyo; 07/01/2013 a las 12:12
  #9 (permalink)  
Antiguo 21/12/2012, 11:43
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

Ante todo, muchas gracias por vuestras respuestas!!!

lo malo es que ninguna me ha servido :( :( :(
ponga la que ponga me da el mismo error...

no sé por qué!!
  #10 (permalink)  
Antiguo 21/12/2012, 11:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al crear una tabla

Bueno, empecemos por el lado de que en tu primer post dices:
Cita:
ORA-00907: missing right parenthesis
Y eso es un error de Oracle y no de MySQL...
Si fuese MySQL, esto funcionaría:
Código MySQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. nombre VARCHAR(60) NOT NULL,
  4. direccion VARCHAR(100) NOT NULL,
  5. coord_X FLOAT,
  6. coord_Y FLOAT,
  7. puntuacion FLOAT,
  8. );

Pero si es Oracle, deberías ser mas o menos:
Código SQL:
Ver original
  1. CREATE TABLE Restaurante
  2. (
  3. id NUMBER(10,0),
  4. nombre VARCHAR2(60) NOT NULL,
  5. direccion VARCHAR2(100) NOT NULL,
  6. coord_X NUMBER(20,8),
  7. coord_Y NUMBER(20,8,
  8. puntuacion NUMBER(10,4),
  9. PRIMARY KEY(id)
  10. );
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 21/12/2012, 11:59
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: problema al crear una tabla

Hola,

A mi me ha creado la tabla sin problemas, pero por si acaso, prueba así:

Código MySQL:
Ver original
  1. CREATE TABLE `Restaurante`
  2. (
  3. `nombre` VARCHAR(60) NOT NULL,
  4. `direccion` VARCHAR(100) NOT NULL,
  5. `coord_X` FLOAT,
  6. `coord_Y` FLOAT,
  7. `puntuacion` FLOAT,
  8. );

No creo que sea por `<- esto, pero por probar, solo pierdes un poco de tiempo.

.
  #12 (permalink)  
Antiguo 21/12/2012, 12:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al crear una tabla

El acento grave se usa cuando hay caracteres especiales en los nombres, o bien se usan palabras reservadas. No son mandatorios en otros casos, y en ese no veo que haya columnas con problemas, pero lo que me llama la atención es lo que dije al principio: El error que menciona en el primer post no es de MySQL, sino de Oracle.
Creo que está pifiándole a algo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 22/12/2012, 10:20
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

gracias gnzsoloyo!

tú código SQL sí que se ejecuta sin problema, pero el id sigue sin ser autoincrementado...

cómo sería para hacerlo así?


De nuevo, agradecer a todos vuestras respuestas!!
  #14 (permalink)  
Antiguo 22/12/2012, 10:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al crear una tabla

¿Cuál de los códigos? ¿El de Oracle o el de MySQL?
¿Cómo lo usas?
¿En qué contexto?
¿Cómo está redactada el INSERT?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 26/12/2012, 07:18
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

buenas

gnzsoloyo el código que me funciona es el de ORACLE. Entro por consola con sqlplus y pongo el código que me comentaste. El tema es hacer que sea autoincrementado...
  #16 (permalink)  
Antiguo 26/12/2012, 07:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al crear una tabla

Oracle, hasta lo que yo sé, no tiene autoincrementales. Para eso se usan SEQUENCES, que permiten simular ese efecto.
Al menos eso es lo que hacemos en todos los desarrollos de la empresa.
Y por otro lado, SQLPlus es parte del paquete de Oracle... no de MySQL.

Obviamente te has equivocado desde el principio al postear este tema en el Foro de MySQL, porque Oracle no es MySQL. Son motores completamente diferentes.
Oracle adquirió a MySQL como parte del paquete de Sun Microsystems, pero no son la misma cosa, no se integraron ni lo harán.
Te paso el post a Oracle para continuar allá.

PD: Si te fijas en Google, buscando "autoincrementales en Oracle", verás que en todos los foros y todos los manuales se dice que no existen, sino que se usan secuencias...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/12/2012 a las 07:41
  #17 (permalink)  
Antiguo 02/01/2013, 20:39
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

muchas gracias por tu aclaración gnzsoloyo
  #18 (permalink)  
Antiguo 03/01/2013, 18:26
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

Tras mirar un poco he encontrado lo que creo que sería la solución:

Crear una secuencia, un trigger que se ejecuta cada vez que se crea una linea en la tabla y que esa secuencia haga de indice en la tabla.

Código SQL:
Ver original
  1. CREATE SEQUENCE IdRest
  2. START WITH  1
  3. INCREMENT BY 1;
  4.  
  5. CREATE OR REPLACE TRIGGER rest_trigger
  6. BEFORE INSERT ON Restaurante
  7. FOR EACH ROW
  8. BEGIN
  9.       SELECT IdRest.NEXTVAL INTO :NEW.id FROM dual;
  10. END;
  11.  
  12. CREATE TABLE Restaurante
  13. (
  14.     id INTEGER PRIMARY KEY NOT NULL,
  15.     nombre VARCHAR(60) NOT NULL,
  16.     direccion VARCHAR(100) NOT NULL,    
  17.     coord_X FLOAT,
  18.     coord_Y FLOAT,
  19.     puntuacion FLOAT
  20. );

Pero sigo con problemillas, ya que no me crea el trigger. eso que he escrito estaría bien??

Gracias!!

Última edición por gnzsoloyo; 07/01/2013 a las 12:11
  #19 (permalink)  
Antiguo 03/01/2013, 19:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al crear una tabla

El trigger es innecesario si haces el insert así:
Código SQL:
Ver original
  1. INSERT INTO Restaurante
  2. VALUES(IdRest.NEXTVAL, 'nombre', 'direccion', 34.7865465, 65.2347655, 9);

La regla básica es: Nunca compliques las cosas más de lo necesario. Un trigger es un recurso demasiado poderoso para desperdiciarlo en ese uso, y además te obligaría a escribir todos los insert indicando una a una las columnas a ingresar.

Por cierto: Los tipos de dato no son universales tampoco. En Oracle se usa VARCHAR2, no VARCHAR, y no estoy muy seguro de que entienda bien el FLOAT; creo que lo correcto es NUMBER, con el formato de longitud y decimales como en:
Código SQL:
Ver original
  1. lng NUMBER(14,8)

Verifica los tipos de columna de Oracle.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 04/01/2013, 01:52
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: problema al crear una tabla

¿ los has creado en el orden correcto ?

Mira :


Código SQL:
Ver original
  1. SQL> SET timin ON
  2. SQL> CREATE TABLE Restaurante
  3.   2  (
  4.   3  id INTEGER PRIMARY KEY NOT NULL,
  5.   4  a VARCHAR(60) NOT NULL,
  6.   5  b VARCHAR(100) NOT NULL,
  7.   6  c FLOAT,
  8.   7  d FLOAT,
  9.   8  e FLOAT
  10.   9  );
  11.  
  12. Tabla creada.
  13.  
  14.  REAL: 32
  15. SQL> CREATE SEQUENCE IdRest
  16.   2  START WITH 1
  17.   3  INCREMENT BY 1;
  18.  
  19. Secuencia creada.
  20.  
  21.  REAL: 0
  22. SQL>
  23. SQL> CREATE OR REPLACE TRIGGER rest_trigger
  24.   2  BEFORE INSERT ON Restaurante
  25.   3  FOR EACH ROW
  26.   4  BEGIN
  27.   5  SELECT IdRest.NEXTVAL INTO :NEW.id FROM dual;
  28.   6  END;
  29.   7  
  30.   8  /
  31.  
  32. Disparador creado.
  33.  
  34.  REAL: 32
  35. SQL> INSERT INTO restaurante
  36.   2  (a,b,c,d,e)
  37.   3  VALUES
  38.   4  ('1','2',3,4,5);
  39.  
  40. 1 fila creada.
  41.  
  42.  REAL: 31
  43. SQL> commit;
  44.  
  45. Validación terminada.
  46.  
  47.  REAL: 16
  48. SQL> SELECT id,substr(a,1,1),substr(b,1,1),c,d,e
  49.   2  FROM restaurante;
  50.  
  51.        ID S S         C         D         E
  52. --------- - - --------- --------- ---------
  53.         1 1 2         3         4         5
  54.  
  55.  REAL: 15
  56. SQL>
  #21 (permalink)  
Antiguo 07/01/2013, 11:25
 
Fecha de Ingreso: octubre-2012
Ubicación: Madrid
Mensajes: 67
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: problema al crear una tabla

Muchas gracias!!

Conseguí solucionarlo. Lo que me faltaba era la '/' al final de la creación del trigger. Y efectivamente, jc3000, el orden correcto sería crear la tabla, luego la secuencia y por último el trigger. Muchas gracias por todo.

gnzsoloyo, en cuanto a los tipos, seguramente tengas razón y sean esos más correctos, pero los que he puesto no se "quejan" y funcionan correctamente, así que creo que voy a continuar con esa estructura!!

Muchas gracias por todo!!

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:11.