4D v13.4Implementaciones del motor SQL de 4D |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
Implementaciones del motor SQL de 4D
|
Tipo 4D SQL | Descripción | 4D |
Varchar | Texto Alfanumérico | Texto o Alfa |
Real | Número de punto flotante en el rango de +/-1.7E308 | Real |
Numeric | Número entre +/- 2E64 | Entero 64 bits |
Float | Número de punto flotante (virtualmente infinito) | Float |
Smallint | Número entre -32 768 y 32 767 | Entero |
Int | Número entre -2 147 483 648 y 2 147 483 647 | Entero largo, Entero |
Int64 | Número entre +/- 2E64 | Entero 64 bits |
UUID | Número de 16 bytes (128 bits) contiene 32 caracteres hexadecimales | Alpha format UUID |
Bit | Campo que sólo acepta los valores TRUE/FALSE o 1/0 | Booleano |
Boolean | Campo que sólo acepta los valores TRUE/FALSE o 1/0 | Booleano |
Blob | Hasta 2 GB; todo objeto binario tal como una imagen, un documento, una aplicación | Blob |
Bit varying | Hasta 2 GB; todo objeto binario tal como una imagen, un documento, una aplicación | Blob |
Clob | Hasta 2 GB de texto. Esta columna (campo) no puede indexarse. No se guarda en el registro mismo. | Texto |
Text | Hasta 2 GB de texto. Esta columna (campo) no puede indexarse. No se guarda en el registro mismo. | Texto |
Timestamp | 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 | Duración en formato 'HH:MM:SS:ZZ' | Hora |
Interval | Duración en formato 'HH:MM:SS:ZZ' | Hora |
Picture | Imagen PICT hasta de 2 GB | Imagen |
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. 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. 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.
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 sólo 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.
El catálogo SQL de 4D incluye siete tablas sistema, accesibles por todo usuario SQL que tenga acceso de lectura: _USER_TABLES, _USER_COLUMNS, _USER_INDEXES, _USER_CONSTRAINTS, _USER_IND_COLUMNS, _USER _CONS_ COLUMNS y _USER_SCHEMAS.
Conforme a los usos en el mundo SQL, las tablas sistema describen la estructura de la base de datos. Esta es una descripción de estas tablas y sus campos:
_USER_TABLES | Describe las tablas usuario de la base | |
TABLE_NAME | VARCHAR | Nombre de tabla |
TEMPORARY | BOOLEAN | True si la tabla es temporal; de lo contrario, false |
TABLE_ID | INT64 | Número de tabla |
SCHEMA_ID | INT32 | Número de esquema |
_USER_COLUMNS | Describe las columnas de las tablas usuarios de la base | |
TABLE_NAME | VARCHAR | Nombre de tabla |
COLUMN_NAME | VARCHAR | Nombre de columna |
DATA_TYPE | INT32 | Tipo de columna |
DATA_LENGTH | INT32 | Largo de la columna |
NULLABLE | BOOLEAN | True si la columna acepta valores NULL; de lo contrario, false |
TABLE_ID | INT64 | Número de tabla |
COLUMN_ID | INT64 | Número de columna |
_USER_INDEXES | Describe los índices usuarios de la base | |
INDEX_ID | VARCHAR | Número de índice |
INDEX_NAME | VARCHAR | Nombre de índice |
INDEX_TYPE | INT32 | Tipo de índice (1=BTree / Composite, 3=Cluster / Palabras claves, 7=Auto) |
TABLE_NAME | VARCHAR | Nombre de la tabla con índice |
UNIQUENESS | BOOLEAN | True si el índice impone una restricción de unicidad; de lo contrario, false |
TABLE_ID | INT64 | Número de tabla con índice |
_USER_IND_COLUMNS | Describe las columnas de índices usuarios de la base | |
INDEX_ID | VARCHAR | Número de índice |
INDEX_NAME | VARCHAR | Nombre de índice |
TABLE_NAME | VARCHAR | Nombre de tabla con índice |
COLUMN_NAME | VARCHAR | Nombre de columna con índice |
COLUMN_POSITION | INT32 | Posición de columna en el índice |
TABLE_ID | INT64 | Número de tabla con índice |
COLUMN_ID | INT64 | Número de columna |
_USER_CONSTRAINTS | Describe las restricciones usuarios de la base | |
CONSTRAINT_ID | VARCHAR | Número de restricción |
CONSTRAINT_NAME | VARCHAR | Nombre de restricción |
CONSTRAINT_TYPE | VARCHAR | Tipo de restricción |
TABLE_NAME | VARCHAR | Nombre de tabla con restricción |
TABLE_ID | INT64 | Número de tabla con restricción |
DELETE_RULE | VARCHAR | Regla de supresión – CASCADE o RESTRICT |
RELATED_TABLE_NAME | VARCHAR | Nombre de tabla relacionada |
RELATED_TABLE_ID | INT64 | Número de tabla relacionada |
_USER_CONS_COLUMNS | Describe las columnas de restricciones usuarios de la base | |
CONSTRAINT_ID | VARCHAR | Número de restricción |
CONSTRAINT_NAME | VARCHAR | Nombre de restricción |
TABLE_NAME | VARCHAR | Nombre de tabla con restricción |
TABLE_ID | INT64 | Número de tabla con restricción |
COLUMN_NAME | VARCHAR | Nombre de columna con restricción |
COLUMN_ID | INT64 | Número de columna con restricción |
COLUMN_POSITION | INT32 | Posición de columna con restricción |
RELATED_COLUMN_NAME | VARCHAR | Nombre de columna relacionada en una restricción |
RELATED_COLUMN_ID | INT32 | Número de columna relacionada en una restricción |
_USER_SCHEMAS | Describe los esquemas de la base | |
SCHEMA_ID | INT32 | Número del esquema |
SCHEMA_NAME | VARCHAR | Nombre del esquema |
READ_GROUP_ID | INT32 | Número del grupo con acceso sólo lectura |
READ_GROUP_NAME | VARCHAR | Nombre del grupo con acceso lectura-escritura |
READ_WRITE_GROUP_ID | INT32 | Número del grupo con acceso lectura-escritura |
READ_WRITE_GROUP_NAME | VARCHAR | Nombre del grupo having read-write access |
ALL_GROUP_ID | INT32 | Número del grupo con acceso completo |
ALL_GROUP_NAME | VARCHAR | Nombre del grupo con acceso completo |
Nota: las tablas sistema se asignan a un esquema particular llamado SYSTEM_SCHEMA. Este esquema no puede modificarse o borrarse. No aparece en la lista de esquemas mostrada en el inspector de tablas. Es accesible en modo lectura únicamente por todos los usuarios.
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).
4D le permite administrar la llave primaria de una tabla de dos maneras:
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 crear una llave primaria:
Los campos incluidos en la llave primaria aparecen subrayados en el editor y su descripción SQL muestra la palabra clave PRIMARY KEY.
El o los campo(s) que pertenece(n) a la llave primaria no debe contener valores duplicados. Si ya existen valores duplicados en los registros de tabla, aparece una caja de diálogo de advertencia.
Nota: la o las columna(s) que pertenece(n) a la llave primaria no aceptan valores NULL.
Para borrar la llave primaria de una tabla:
Producto: 4D
Tema: Utilizar SQL en 4D