Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Equivalencia de código. (https://www.clubdelphi.com/foros/showthread.php?t=11437)

jplj 14-06-2004 17:20:03

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.

delphi.com.ar 14-06-2004 17:35:14

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!

jachguate 14-06-2004 22:34:16

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.

;)

jplj 15-06-2004 20:03:09

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.

delphi.com.ar 15-06-2004 20:42:14

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!

jachguate 15-06-2004 21:08:09

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.

;)

jplj 15-06-2004 22:03:42

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.

guillotmarc 15-06-2004 22:20:07

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.

jplj 16-06-2004 19:18:00

Gracias por tus comentarios. En particular por la nota sobre los
procedimientos almacenados.

Saludos
Juan P.


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

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