Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Implementaciones del motor SQL de 4D
|
4D SQL | Tipo de valor de datos columna usuario* | Descripción | 4D |
Varchar | 10 | Texto Alfanumérico | Texto o Alfa |
Real | 6 | Número de punto flotante en el rango de +/-1.7E308 | Real |
Numeric | 5 | Número entre +/- 2E64 | Entero 64 bits |
Float | 6 | Número de punto flotante en el rango de +/-1.7E308 | Real |
Smallint | 3 | Número entre -32 768 y 32 767 | Entero |
Int | 4 | Número entre -2 147 483 648 y 2 147 483 647 | Entero largo, Entero |
Int64 | 5 | Número entre +/- 2E64 | Entero 64 bits |
UUID | 13 | Número de 16 bytes (128 bits) representado por 32 caracteres hexadecimales | Alpha format UUID |
Bit | 1 | A field that can only take the values TRUE/FALSE or 1/0 | Booleano |
Boolean | 1 | Un campo que solo acepta los valores TRUE/FALSE o 1/0 | Booleano |
Blob | 18 | Hasta 2 GB; todo objeto binario tal como un gráfico, otra aplicación o un documento | Blob |
Bit varying | 18 | Hasta 2 GB; todo objeto binario tal como un gráfico, otra aplicación o un documento | Blob |
Clob | 14 | Hasta 2 GB de texto. Esta columna (campo) no puede indexarse. No se guarda en el registro mismo. | Texto |
Text | 14 | Hasta 2 GB de texto. Esta columna (campo) no puede indexarse. No se guarda en el registro mismo. | Texto |
Timestamp | 8 | Fecha en formato 'YYYY/MM/DD' y hora en formato 'HH:MM:SS:ZZ' | Partes Fecha y Hora generados por separado (conversión automática) |
Duration | 9 | Duración en formato 'HH:MM:SS:ZZ' | Hora |
Interval | 9 | Duración en formato 'HH:MM:SS:ZZ' | Hora |
Picture | 12 | Imagen PICT hasta de 2 GB | Imagen |
Object | 21 | Serialización binaria de un objeto JSON (CAST como un VARCHAR) | Objeto |
* Devuelto por las tablas del sistema _USER_COLUMNS y _USER_VIEW_COLUMNS. Para mayor información, ver Tablas sistema.
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:
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 "clásico". 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:
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. Cuando está seleccionada, los campos que contengan valores NULL se consideran sistemáticamente que contienen valores 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_constante | valor | Descripción |
d | aaaa-mm-dd | Fecha únicamente |
t | hh:mm:ss[.fff] | Hora únicamente |
ts | aaaa-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:
Notas:
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 solo esquema.
Atención: la implementación del esquema SQL requiere que el sistema de administración de acceso de 4D esté activado (en otras palabras, se haya asignado una contraseña al Diseñador). De lo contrario, todos los usuarios pueden tener acceso a los datos sin restricciones.
Nota: el control de acceso vía los esquemas solo 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:
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:
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.
Producto: 4D
Tema: Utilizar SQL en 4D
Modificado: 4D v17 R5
Manual de SQL ( 4D v20 R7)