powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Подзапрос в check constraint в hsqldb
5 сообщений из 5, страница 1 из 1
Подзапрос в check constraint в hsqldb
    #36985054
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь создать таблицу в hsqldb 2.0 (прошу не рефлексировать насчёт названий полей в транслите - делаю для себя):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE operaciya (
	id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
	kategoriya_id INT NOT NULL,
	dengohran_izt_id INT NOT NULL,
	dengohran_nazn_id INT,
	summa FLOAT NOT NULL,
	kolichestvo FLOAT,
	polzovatel_id INT NOT NULL,
	data DATE NOT NULL,
	opisanie VARCHAR( 40 ),
	CONSTRAINT fk_operaciya_kategoriya FOREIGN KEY (kategoriya_id)
		REFERENCES kategoriya_operacii (id),
	CONSTRAINT fk_operaciya_dengohran_izt FOREIGN KEY (dengohran_izt_id)
		REFERENCES dengohranilische (id),
	CONSTRAINT fk_operaciya_dengohran_nazn FOREIGN KEY (dengohran_nazn_id)
		REFERENCES dengohranilische (id),
	CONSTRAINT fk_operaciya_polzovatel FOREIGN KEY (polzovatel_id)
		REFERENCES polzovatel (id),
	CONSTRAINT chk_nazn CHECK (
		(((SELECT MAX(deystvie_id) FROM kategoriya_operacii ko WHERE ko.id = kategoriya_id) =  2 ) AND (dengohranilische_nazn_id NOT NULL)) 
		OR
		((SELECT MAX(deystvie_id) FROM kategoriya_operacii ko WHERE ko.id = kategoriya_id) <>  2 )
))
Возникает "SQLException: unexpected token: required: )".
При этом в документации по hsqldb написано:
автор(Chapter 4. Schemas and Database Objects)
<...>
CHECK

A CHECK constraint consists of a <search condition> that must not be false (can be unknown) for each row of the table. The <search condition> can reference all the columns of the current row, and if it contains a <subquery>, other tables and views in the database (excluding its own table).
Т.е., как я понял, подзапросы таки должны поддерживаться.
Если позапросы не поддерживаются, то как ещё можно реализовать данное ограничение на уровне БД (не хотелось бы выносить логику модели данных на уровень приложения)? Требуется, чтобы если kategoriya_operacii.deystvie_id для данного kategoriya_id равно 2, значение dengohranilische_nanz_id было не NULL.
...
Рейтинг: 0 / 0
Подзапрос в check constraint в hsqldb
    #36985193
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одну ошибку нашёл: пропустил IS в условии проверки на NULL.
Теперь выдаёт другое изключение: "SQLException: feature not supported: subquery in check constraint in statement".
...
Рейтинг: 0 / 0
Подзапрос в check constraint в hsqldb
    #36985248
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterОдну ошибку нашёл: пропустил IS в условии проверки на NULL.
Теперь выдаёт другое изключение: "SQLException: feature not supported: subquery in check constraint in statement"."Исключение SQL: возможность не поддерживается: подзапрос в определении check-ограничения". Что тут непонятного?
...
Рейтинг: 0 / 0
Подзапрос в check constraint в hsqldb
    #36985443
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

1. Если подзапросы в CHECK-ограничении не поддерживаются, то почему в документации упомянута возможность изпользования подзапросов в CHECK-ограничении: "The <search condition> can reference all the columns of the current row, and if it contains a <subquery>, other tables"?
2. Как ещё можно реализовать отмену вставки, если вставляемые значения не соответствуют определённому условию? Пробовал триггер:

Код: plaintext
1.
2.
3.
CREATE TRIGGER tg_val BEFORE INSERT ON valuta
	REFERENCING NEW ROW AS new
	FOR EACH ROW WHEN (new.simvol IS NULL)
	SIGNAL SQL_STATE '45000'

Но этот код выдаёт: SQLException: unexpected token: SIGNAL.
...
Рейтинг: 0 / 0
Подзапрос в check constraint в hsqldb
    #36985456
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriter1. Если подзапросы в CHECK-ограничении не поддерживаются, то почему в документации упомянута возможность изпользования подзапросов в CHECK-ограниченииЯ сегодня впервые в жизни услышал название этой СУБД(?). Спросите у авторов.
2. попробуйте не сигналить, а тупо делить на 0.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Подзапрос в check constraint в hsqldb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]