4D v16

Implementaciones del motor SQL de 4D

Inicio

 
4D v16
Implementaciones del motor SQL de 4D

Implementaciones del motor SQL de 4D  


 

 

Básicamente, el motor SQL de 4D es compatible con SQL-92. Esto significa que para una descripción detallada de los comandos, funciones, operadores y sintaxis a utilizar, puede referirse a la documentación del SQL-92. Múltiples recursos sobre este tema están disponibles en Internet.

Sin embargo, el motor SQL de 4D no soporta el 100% de las funciones del SQL-92 y ofrece otras funciones adicionales específicas.

Esta sección cubre las principales implementaciones y limitaciones del motor SQL de 4D.

Puesto que el motor SQL de 4D se ha integrado en el corazón de la base de datos de 4D, todas las limitaciones relativas al número máximo de tablas, columnas (campos) y registros por base, así como las reglas para dar nombres a las tablas y columnas, son las mismas a las del motor estándar de 4D. Se enumeran a continuación.

  • Número máximo de tablas: teóricamente dos mil millones, pero por razones de compatibilidad con 4D: 32767.
  • Número máximo de columnas (campos) por tabla: teóricamente dos mil millones columnas (campos), pero por razones de compatibilidad con 4D: 32767.
  • Número máximo de líneas (registros) por tabla: mil millones.
  • Número máximo de llaves de índice: 128 mil millones para los tipos alfa, texto y flotante; 256 mil millones para los otros tipos (escalares).
  • Una llave primaria no puede ser un valor NULL y debe ser única. No es necesario indexar las columnas (campos) llaves primarias.
  • Número máximo de caracteres permitido para los nombres de tablas y campos: 31 caracteres (limitación 4D).
No está permitido crear varias tablas con el mismo nombre.  Aplica el mecanismo de control estándar de 4D.

La siguiente tabla indica los tipos de datos soportados en el SQL de 4D así como su tipo correspondiente en 4D:

Tipo 4D SQLDescripción4D
VarcharTexto AlfanuméricoTexto o Alfa
RealNúmero de punto flotante en el rango de +/-1.7E308Real
NumericNúmero entre +/- 2E64Entero 64 bits
FloatNúmero de punto flotante (virtualmente infinito)Float
SmallintNúmero entre -32 768 y 32 767Entero
Int Número entre -2 147 483 648 y 2 147 483 647Entero largo, Entero
Int64 Número entre +/- 2E64Entero 64 bits
UUIDNúmero de 16 bytes (128 bits) representado por 32 caracteres hexadecimalesAlpha format UUID
Bit Campo que sólo acepta los valores TRUE/FALSE o 1/0Booleano
Boolean Campo que sólo acepta los valores TRUE/FALSE o 1/0Booleano
BlobHasta 2 GB; todo objeto binario tal como una imagen, un documento, una aplicaciónBlob
Bit varyingHasta 2 GB; todo objeto binario tal como una imagen, un documento, una aplicaciónBlob
ClobHasta 2 GB de texto. Esta columna (campo) no puede indexarse. No se guarda en el registro mismo.Texto
TextHasta 2 GB de texto. Esta columna (campo) no puede indexarse. No se guarda en el registro mismo.Texto
TimestampFecha en formato 'YYYY/MM/DD' y hora en formato 'HH:MM:SS:ZZ'Partes Fecha y Hora generados por separado (conversión automática)
DurationDuración en formato 'HH:MM:SS:ZZ'Hora
IntervalDuración en formato 'HH:MM:SS:ZZ'Hora
PictureImagen PICT hasta de 2 GBImagen

La conversión entre los tipos de datos numéricos es automática.
Las cadenas que representan un número no se convierten en un número correspondiente. Hay funciones CAST especiales que convertirán los valores de un tipo a otro.
Los siguientes tipos de datos SQL no se implementan:

  • NCHAR
  • NCHAR VARYING.

Los valores NULL se implementan en el lenguaje SQL de 4D, así como en el motor de base de datos de 4D. Sin embargo, no son soportados en el lenguaje 4D. Sin embargo, es posible leer y escribir valores NULL en un campo 4D utilizando los comandos Is field value Null y SET FIELD VALUE NULL.

Por razones de compatibilidad en 4D, los valores NULL almacenados en las tablas de la base de datos 4D se convierten automáticamente en valores por defecto cuando se manipulan vía el lenguaje 4D. Por ejemplo, en el caso de la siguiente instrucción:

 mivarAlf:=[mitabla]MiCampoAlfa

... si el campo MiCampoAlfa contiene un valor NULL, la variable mivarAlfa contendrá "" (cadena vacía).

Los valores por defecto dependen del tipo de dato:

  • Para los tipos Alfa y Texto: ""
  • Para los tipos Real, Entero y Entero largo: 0
  • Para el tipo Fecha: "00/00/00"
  • Para el tipo Hora: "00:00:00"
  • Para el tipo Booleano: Falso
  • Para el tipo Imagen: Imagen vacía
  • Para el tipo BLOB: BLOB vacío

Por otra parte, este mecanismo, en principio, no se aplica a los tratamientos efectuados a nivel del motor de la base de datos 4D, tales como las consultas. De hecho, la búsqueda de un valor "vacío" (por ejemplo mivalor = 0) no encuentra registros que almacenen el valor NULL y viceversa. Cuando los dos tipos de valores (valores por defecto y NULL) están presentes en los registros para un mismo campo, algunos procesos pueden alterarse o necesitar código adicional.

Para evitar estos inconvenientes, una opción permite estandarizar todos los procedimientos el lenguaje 4D: Mapear valores NULOS a valores vacíos. Esta opción, que se encuentra en la ventana Inspector de campos del editor de estructura, permite extender el principio de utilizar los valores por defecto en todos los tratamientos. Los campos que contengan valores NULL se consideran sistemáticamente que contienen valores por defecto. Esta opción está seleccionada por defecto.

La propiedad Mapear valores NULOS a valores vacíos se tiene en cuenta a un nivel muy bajo del motor de la base de datos. Actúa más en particular en el comando Is field value Null.

La propiedad de campo Rechazar valor NULO de entrada permite evitar el almacenamiento de valores NULL:


Cuando este atributo está seleccionado para un campo, no será posible almacenar el valor NULL en este campo. Esta propiedad de bajo nivel corresponde exactamente al atributo NOT NULL de SQL.
Generalmente, si quiere poder utilizar los valores NULL en su base de datos 4D, se recomienda utilizar exclusivamente el lenguaje SQL de 4D.

Nota: en 4D, los campos también puede tener el atributo "Obligatorio". Los dos conceptos son similares, pero su alcance es distinto: el atributo "obligatorio" es un control de entrada, mientras que el atributo "Rechazar valor NULO de entrada" trabaja a nivel del motor de la base de datos.
Si un campo con este atributo recibe un valor NULL, se genera un error.

El servidor SQL integrado de 4D soporta las constantes fecha y hora de acuerdo al API ODBC. Esta es la sintaxis para las secuencias de constantes fecha y hora ODBC:

{constant_type 'value'}

tipo_constantevalorDescripción
daaaa-mm-ddFecha únicamente
thh:mm:ss[.fff]Hora únicamente
tsaaaa-mm-dd hh:mm:ss[.fff]Fecha y hora (timestamp)

Note: fff indica milisegundos.

Por ejemplo, puede utilizar las siguientes constantes:

{ d '2013-10-02' }
{ t '13:33:41' }
{ ts '1998-05-02 01:23:56.123' }

El analizador SQL de fecha rechaza toda expresión fecha que especifique "0" como el día o el mes. Las expresiones como {d'0000-00-00'} o CAST('0000-00-00' AS TIMESTAMP) generan un error. Para realizar en SQL búsquedas en fechas vacías (no confundir con fechas nulas), debe usar una expresión 4D intermedia. Por ejemplo:

 C_LONGINT($count)
 $nullDate:=!00-00-00!
 Begin SQL
            SELECT COUNT(*) FROM Table_1
            WHERE myDate = :$nullDate
            INTO :$count;
 End SQL

Una propiedad de seguridad se ha añadido para los métodos proyecto 4D: Disponible vía SQL:

Cuando está seleccionada, esta opción permite la ejecución del método de proyecto por el motor SQL de 4D. No está seleccionada por defecto, lo que significa que los métodos proyecto 4D están protegidos y no pueden ser llamados por el motor SQL de 4D a menos que haya sido expresamente autorizado al seleccionar esta opción.

Esta propiedad se aplica a todas las consultas SQL internas y externas, si se ejecuta vía el driver ODBC, el código SQL insertado entre las etiquetas Begin SQL/End SQL o el comando QUERY BY SQL.

Notas:

  • Incluso cuando un método tiene el atributo "Disponible vía SQL", los derechos de acceso definidos a nivel de las Propiedades de la base y las propiedades del método se tienen en cuenta durante su ejecución.
  • La función ODBC SQLProcedure devuelve únicamente los métodos proyecto que tienen el atributo "Disponible vía SQL".

  • Transacciones Auto-commit: esta opción permite activar el mecanismo de auto-commit en el motor SQL. El propósito del modo auto-commit es preservar la integridad referencial de los datos. Cuando esta opción está seleccionada, toda búsqueda SELECT, INSERT, UPDATE y DELETE (SIUD) no efectuada dentro de una transacción se incluye automáticamente en una operación ad hoc. Esto garantiza que las consultas se ejecutarán en su totalidad o en caso de error, se cancelarán por completo.
    Las consultas incluidas en una transacción (gestión personalizada de la integridad referencial) no se verán afectadas por esta opción.
    Cuando esta opción no está seleccionada, no se genera transacción automática (excepto para las consultas SELECT... FOR UPDATE, consulte el comando SELECT). Por defecto, esta opción no está seleccionada.
    También puede administrar esta opción por programación utilizando el comando SET DATABASE PARAMETER.
    Nota
    : sólo las bases locales consultadas por el motor SQL de 4D se ven afectadas por este parámetro. En el caso de las conexiones externas a otras bases de datos SQL, el mecanismo de auto-commit es manejado por los motores SQL remotos.
  • Tener en cuenta las mayúsculas y minúsculas en las comparaciones de cadenas: esta opción permite modificar la sensibilidad a las mayúsculas y minúsculas de los caracteres en las consultas SQL. Está seleccionada por defecto, lo que significa que el motor SQL diferencia entre mayúsculas y minúsculas, así como también entre caracteres acentuados cuando se comparan cadenas (ordenaciones y búsquedas). Por ejemplo, "ABC" = "ABC", pero "ABC" # Abc "."
    En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, es posible que desee que las comparaciones de cadenas no sean sensibles a las mayúsculas ("ABC" = "Abc"). Para ello, sólo tendrá que deseleccionar esta opción.
    También puede administrar esta opción por programación utilizando el comando SET DATABASE PARAMETER.

4D implementa el concepto de esquemas. Un esquema es un objeto virtual que contiene las tablas de la base. En el SQL, el propósito de los esquemas es asignar derechos de acceso específicos a los diferentes conjuntos de objetos de la base. Los esquemas dividen la base en entidades independientes que en conjunto forman toda la base. En otras palabras, una tabla siempre pertenece a un sólo esquema.

  • Para crear un esquema, debe utilizar el comando CREATE SCHEMA. A continuación, puede utilizar los comandos GRANT y REVOKE para configurar los tipos de acceso a los esquemas.
  • Para asociar una tabla a un esquema, puede llamar a los comandos CREATE TABLE o ALTER TABLE. También puede usar el menú pop-up "Esquemas"  del Inspector del editor de estructura de 4D, que lista todos los esquemas definidos en la base.
  • El comando DROP SCHEMA permite eliminar un esquema.

Nota: el control de acceso vía los esquemas sólo se aplica a las conexiones desde el exterior. El código SQL ejecutado en 4D vía las etiquetas Begin SQL/End SQL, SQL EXECUTE, QUERY BY SQL, siempre tiene acceso total.

La arquitectura multi-bases se implementa a nivel del servidor SQL de 4D. Desde 4D es posible:

  • conectarse a una base existente utilizando el comando SQL LOGIN.
  • Pasar de una a otra utilizando los comandos SQL LOGIN y SQL LOGOUT.
  • Para abrir y utilizar otra base 4D en lugar de la base actual utilizando el comando USE DATABASE.

En el lenguaje SQL, una llave primaria permite identificar en una tabla la(s) columna(s) (campos) responsables de designar de manera única los registros (líneas). La definición de una llave primaria es particularmente necesaria para la función de replicación de los registros de una tabla de 4D (vér la sección Replicación vía SQL) y para la historialización de las tablas 4D a partir de la v14.

4D le permite administrar la llave primaria de una tabla de varias maneras:

  • Vía el lenguaje SQL
  • Utilizando el editor de estructura de 4D.

Notas:

Puede definir una llave primaria durante la creación de una tabla (vía el comando CREATE TABLE) o al agregar o modificar una columna (vía el comando ALTER TABLE). La llave primaria se define utilizando la cláusula PRIMARY KEY seguida por el nombre de la columna o de una lista de columnas. Para obtener más información, consulte la sección definición_llave_primaria.

4D le permite crear y eliminar directamente llaves primarias vía el menú contextual del editor de la estructura.

Para mayor información, consulte, Definir o eliminar una llave primaria en el manual de Diseño 4D.

El motor SQL integrado de 4D soporta vistas SQL estándar. Una vista es una tabla virtual con datos que pueden provenir de varias tablas de la bases de datos. Una vez que se define una vista, se puede utilizar en un instrucción SELECT como una tabla real.

Los datos se encuentran en una vista se definen mediante una petición de definición basada en el comando SELECT. Las tablas reales utilizadas en la consulta de definición son llamadas "tablas fuentes". Una vista SQL contiene columnas y líneas como una tabla estándar, pero en realidad no existe, sino que es sólo una representación resultante del procesamiento y se almacena en la memoria durante la sesión. Sólo la definición de la vista se almacenada temporalmente.

Dos comandos SQL se utilizan para administrar vistas en 4D v14: Comandos SQL y DROP VIEW.



Ver también 

tipo_datos_sql

 
PROPIEDADES 

Producto: 4D
Tema: Utilizar SQL en 4D

 
HISTORIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)