PDA

Ver la Versión Completa : Equivalencia de código.


jplj
14-06-2004, 17:20:03
Utilizando Acces 97 con la sentencia :


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í:

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:

create table prueba1 (id number(7) Not Null constraint pkey primary key);
y funcionó de maravilla.

En interbase 6.01 la sentencia

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?.


"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
¿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
¿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).

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:

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
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.


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.


¿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.