Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Подзапрос в check constraint в hsqldb / 5 сообщений из 5, страница 1 из 1
30.11.2010, 08:20
    #36985054
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в check constraint в hsqldb
Пытаюсь создать таблицу в 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
30.11.2010, 09:48
    #36985193
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в check constraint в hsqldb
Одну ошибку нашёл: пропустил IS в условии проверки на NULL.
Теперь выдаёт другое изключение: "SQLException: feature not supported: subquery in check constraint in statement".
...
Рейтинг: 0 / 0
30.11.2010, 10:11
    #36985248
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в check constraint в hsqldb
skywriterОдну ошибку нашёл: пропустил IS в условии проверки на NULL.
Теперь выдаёт другое изключение: "SQLException: feature not supported: subquery in check constraint in statement"."Исключение SQL: возможность не поддерживается: подзапрос в определении check-ограничения". Что тут непонятного?
...
Рейтинг: 0 / 0
30.11.2010, 11:05
    #36985443
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в check constraint в hsqldb
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
30.11.2010, 11:11
    #36985456
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в check constraint в hsqldb
skywriter1. Если подзапросы в CHECK-ограничении не поддерживаются, то почему в документации упомянута возможность изпользования подзапросов в CHECK-ограниченииЯ сегодня впервые в жизни услышал название этой СУБД(?). Спросите у авторов.
2. попробуйте не сигналить, а тупо делить на 0.
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Подзапрос в check constraint в hsqldb / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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