Aquí hay una solución que se me ocurrió para una tabla de tipo de bloqueo que puede contener solo una fila, manteniendo una Y o N (un estado de bloqueo de la aplicación, por ejemplo).
Crea la tabla con una columna. Puse una restricción de verificación en la columna para que solo se pueda poner una Y o N en ella. (O 1 o 0, o lo que sea)
Insertar una fila en la tabla, con el estado "normal" (por ejemplo, N significa no bloqueado)
A continuación, crear un desencadenador de inserción en la mesa que sólo tiene una señal de (DB2) o RAISERROR (SQL Server) o RAISE_APPLICATION_ERROR (Oracle). Esto hace que el código de la aplicación pueda actualizar la tabla, pero cualquier INSERT falla.
ejemplo de DB2:
create table PRICE_LIST_LOCK
(
LOCKED_YN char(1) not null
constraint PRICE_LIST_LOCK_YN_CK check (LOCKED_YN in ('Y', 'N'))
);
--- do this insert when creating the table
insert into PRICE_LIST_LOCK
values ('N');
--- once there is one row in the table, create this trigger
CREATE TRIGGER ONLY_ONE_ROW_IN_PRICE_LIST_LOCK
NO CASCADE
BEFORE INSERT ON PRICE_LIST_LOCK
FOR EACH ROW
SIGNAL SQLSTATE '81000' -- arbitrary user-defined value
SET MESSAGE_TEXT='Only one row is allowed in this table';
funciona para mí.
¿Por qué no utilizar una tabla con columnas '(Nombre, Valor)' con una clave principal en Nombre. Entonces puede 'seleccionar Valor de la Tabla donde Nombre =?' Con certeza de que no se devolverán filas o una fila. –
No estoy seguro de que sql sea la mejor solución aquí. Tal vez un simple archivo xml sea más apropiado para la configuración. Yo solía pensar que la configuración! = Data y sql estaban hechos para datos. –
@ar - He visto que sale mal cuando espera leer, digamos, un entero, y obtiene un valor mal formateado en la columna de valor. –