Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Equivalencia de código.

Utilizando Acces 97 con la sentencia :


Código:
CREATE TABLE Nao (
Id COUNTER CONSTRAINT IndicePrimario PRIMARY KEY);
Creo una tabla -Nao- con un campo -Id- autonumérico que además es la clave maestra de la tabla.

¿Esta sentencia es válida para SQL Server, MySQL u Oracle?

Saludos.
Responder Con Cita
  #2  
Antiguo 14-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
El ANSI para creación de tablas, es mas o menos así:

Cita:
CREATE TABLE FROM NOMBRE_DE_TABLA
(NOMBRE_DE_CAMPO_1 TIPO_DE_DATO,
NOMBRE_DE_CAMPO_2 TIPO_DE_DATO,
...
CONSTRAINT NOMBRE_CONTRAINT TIPO DE CONTRAINT (CAMPOS_AFECTADO1, CAMPOS_AFECTADO2)
Los Tipos de datos y tipos de contraints, varían entre los motores, queda en vos buscar cuál es el tipo de dato mas adecuado.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 14-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Lo que no es válido es el tipo de dato "counter".

El resto (de la sintaxis) me parece que debiera ser soportado por cualquier motor.

Ahora, cualquier motor "decente" debiera exigirte que los campos que son parte de la llave primaria esten declarados como not null.

En oracle 9i probe esto:

Código SQL [-]
create table prueba1 (id number(7) Not Null constraint pkey primary key);
y funcionó de maravilla.

En interbase 6.01 la sentencia

Código SQL [-]
create table prueba1 (id numeric(7) Not Null constraint pkey primary key);

También ha funcionado a las mil maravillas.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 15-06-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Gracias por las pruebas.

Una pregunta más: ¿estos otros motores tienen definido algún tipo que
permita generar campos autonuméricos?.


Cita:
"Ahora, cualquier motor "decente" debiera exigirte que los campos que son
parte de la llave primaria esten declarados como not null."
Estoy de acuerdo -no creo que el que uso sea "decente", pero no tengo otra
opción-, no obstante creo que es redundante exigirle a un campo
autonumérico que no permita valores nulos.

Saludos.
Responder Con Cita
  #5  
Antiguo 15-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por jplj
¿estos otros motores tienen definido algún tipo que
permita generar campos autonuméricos?
SQL Server: Si
MySql: Desconozco
Oracle: No, puedes tener una funcionalidad similar, mediante el uso de SEQUENCES. Por el tipo de lockeo de Oracle, sería algo difícil implementar campos Autonuméricos.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 15-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por jplj
¿estos otros motores tienen definido algún tipo que
permita generar campos autonuméricos?.
La generación de autonuméricos no forma parte (aún) del estándar SQL. Regularmente los motores te dan alguna herramienta para generar secuencias de números (sequence en oracle, generator en ib/fb), pero regularmente tenes que asignar vos los valores en un trigger o desde el cliente y ninguno será autonumérico (en el sentido que el servidor lo genere automáticamente).

Cita:
Empezado por jplj
no obstante creo que es redundante exigirle a un campo
autonumérico que no permita valores nulos.
Yo he dicho que un campo que es parte de la llave primaria debiera ser no nulo. Si tu motor tiene algun tipo autonumérico y este ya implicitamente no puede ser nulo, está bien.

Pero si podes luego lanzar una sentencia similar a esta:

Código SQL [-]
update tabla set campo = null where condiciones

y el motor te la acepta... uf... estaras en serios problemas.

NO puedo decir mas, pues al no formar parte del estándar, funcionará de manera diferente en cada motor que se de una funcionalidad como esta.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 15-06-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Bien por lo que veo mi pretensión de crear unas sentencias que me permitieran crear todas las tablas de una BD desde una aplicación con
independencia del motor que este usando no es viable.

Una pregunta más acerca de los autonuméricos. ¿Es posible delegar en el
motor -en un trigger, ... - la generación del valor seudoautonumérico para
el campo que me debe servir de clave maestra, sin necesidad de hacer nada
desde la aplicación?.

Otra de las cosas que pretendo es que las sentencias de insercción,
actualización, eliminación y elección -SELECC, INNER JOIN - sean las mismas
con independencia del motor. Esto es posible o me voy a encontrar
diferencias entre los motores que lo hagan imposible.

¿Hay algún estandar de SQL de obligado cumplimiento por los
diferentes motores?.


Buenas noches.
Juan P.
Responder Con Cita
  #8  
Antiguo 15-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por jplj
Una pregunta más acerca de los autonuméricos. ¿Es posible delegar en el
motor -en un trigger, ... - la generación del valor seudoautonumérico para
el campo que me debe servir de clave maestra, sin necesidad de hacer nada
desde la aplicación?.
Si todos los motores SQL que conozco te dan opción a que como mínimo utilizando un Trigger, toda la asignación de un campo primario autonumérico se haga totalmente en la Base de Datos, sin intervención del cliente.

Cita:
Empezado por jplj
Otra de las cosas que pretendo es que las sentencias de insercción,
actualización, eliminación y elección -SELECC, INNER JOIN - sean las mismas
con independencia del motor. Esto es posible o me voy a encontrar
diferencias entre los motores que lo hagan imposible.
O haces instrucciones muy, muy sencillas, o rapidamente te vas a encontrar diferencias entre las bases de datos.

Cita:
Empezado por jplj
¿Hay algún estandar de SQL de obligado cumplimiento por los
diferentes motores?.
Efectivamente hay estandares a los que se adhieren las bases de datos. (principalmente SQL'89 y SQL'92, anque creo que hay estandares más modernos).

Aunque ninguna base de datos cumple totalmente el estándar, y se limitan a soportar totalmente solo el núcleo del estándar (muchas veces con variaciones de sintaxis).

Creo que la única excepción es Oracle, que me parece que soporta totalmente el estándar SQL.

NOTA : Una forma de emmascarar las diferencias entre las bases de datos, es utilizar procedimientos almacenados. De esta forma la aplicación puede tratar igual a todos los motores.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 16-06-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Gracias por tus comentarios. En particular por la nota sobre los
procedimientos almacenados.

Saludos
Juan P.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:38:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi