sql-server - regulares - restricciones mysql
¿Hay un motor de base de datos que permita la restricción de campo orientable especificada por RegEx? (2)
Estoy buscando un motor de base de datos que pueda manejar las restricciones de datos especificadas a través de RegEx. Entonces, además del tipo de datos, quiero poder controlar el formato de los datos. Por ejemplo, un campo varchar(255)
podría restringirse más para que sea como [a-zA-Z0-9 ]
.
Necesito que el RegEx también pueda ser consultado, por lo que puedo compartir esas restricciones en todo el sistema de n niveles para aplicarlo en varios niveles. Por ejemplo, MySQL permite consultas de information_schema
para obtener metadatos, y otros motores de bases de datos tienen formas similares.
Hice una publicación ayer ( MySQL Queriable Field Constraint por RegEx ), haciendo referencia a cosas que leo, pero no se ve prometedor con MySQL, así que estoy abriendo esto a cualquier motor de db, aunque preferiría MS SQL, Oracle, DB2 o MySQL, ya que será más fácil vender el negocio.
¿Existe un motor de base de datos que permita estas restricciones de expresiones regulares? Si es así, ¿cuál es y cómo se establecen y se consultan las restricciones?
Aquí hay un ejemplo de comodín en el servidor sql para esto.
create table #Something
(
SomeValue varchar(255)
, constraint MyCheck CHECK (SomeValue like ''[a-z][a-z][0-9]%'')
)
insert #Something
select ''ab3adoofnod''
--(1 row(s) affected)
insert #Something
select ''a3b3adoofnod''
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "MyCheck". The conflict occurred in database "tempdb", table "dbo.#Something__________________________________________________________________________________________________________0000000000DD", column ''SomeValue''.
The statement has been terminated.
Si desea usar algunos t-sql para ver las definiciones de sus restricciones de verificación, puede usar la vista de catálogo sys.check_constraints.
Aquí hay un ejemplo para ver TODAS las restricciones de verificación para la tabla de arriba. Las columnas de definición proporcionarán la búsqueda de comodines tal como se define en la restricción.
select *
from tempdb.sys.check_constraints
where parent_object_id = object_id(''tempdb..#Something'')
En Oracle puede especificar restricciones personalizadas, en las que puede usar funciones que evalúan expresiones regulares ; por ejemplo:
SQL> create table test_pattern ( txt varchar2(1000))
2 /
Table created.
SQL> alter table test_pattern add constraint check_pattern check (regexp_instr(txt, ''^START'') != 0)
2 /
Table altered.
SQL> insert into test_pattern values (''START a d f g '')
2 /
1 row created.
SQL> insert into test_pattern values (''_START a d f g '')
2 /
insert into test_pattern values (''_START a d f g '')
*
ERROR at line 1:
ORA-02290: check constraint (SIUINTEGRA.CHECK_PATTERN) violated
Puede obtener información sobre las restricciones que establece con algo como:
select *
from dba_constraints
where table_name = ''TEST_PATTERN''