2013-04-03 4 views
2

Часть моего определения SQL (для ):По умолчанию значение столбца (если значение равно NULL) равна другой колонке

CREATE TABLE activities (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY, 
    group_id BIGINT NOT NULL 
    CONSTRAINT pk_activities PRIMARY KEY (id) 
); 

Сценарий во время и insert является:

  • id автоматически генерируется/автоинкретизируется,
  • group_id если указано (не нуль), задано значение
  • group_id если не указано устанавливается на значение id просто генерируемого

Я предназначаться и (для испытаний).

Это можно сделать?

+0

** Err ** .. не видел, что он находится в [tag: HSQLDB] – Luv

ответ

1

Вы не можете установить значение по умолчанию для другого столбца.

Однако вы можете создать TRIGGER, который выполнит эту задачу.

Это пример для PostgreSQL. Он автоматически заменяет column с anothercolumn если NULL перед тем INSERT или UPDATE:

CREATE OR REPLACE FUNCTION mytable_fn() 
RETURNS trigger AS 
$body$ 
BEGIN 
    IF NEW.column ISNULL THEN 
     NEW.column := NEW.anothercolumn; 
    END IF; 
    RETURN NEW; 
END; 
$body$ 
LANGUAGE 'plpgsql'; 

CREATE TRIGGER mytable_trigger 
BEFORE INSERT OR UPDATE ON mytable 
FOR EACH ROW 
EXECUTE PROCEDURE mytable_fn(); 
+0

Являются ли триггеры универсальными/стандартизованными? Можете ли вы привести соответствующий пример? –

+0

@JohanesMatian: Насколько я знаю, большинство современных баз данных (PostgreSQL, MySQL, Oracle, MSSQL) реализуют триггеры, но язык не обязательно совместим. Однако я не знаю много о hsqldb. Я обновил свой ответ, чтобы привести пример для Postgres. – mvp

+0

Я обязательно пойму, используя триггер, спасибо –

1

Это можно сделать с помощью триггера, или если вы не хотите использовать триггеры, чтобы справиться с NULL при выборе строки, как это:

SELECT id, isnull(group_id, id) group_id FROM activities; 
+0

' ISNULL() 'не является стандартной функцией SQL. Например, PostgreSQL не поддерживает его. Кроме того, это не изменяет значение для рассматриваемого поля. – mvp

+1

HSQLDB поддерживает все варианты IFNULL, ISNULL, NULLIF, COALESCE и т. Д., Используемые в разных системах баз данных. См. Руководство. – fredt

Смежные вопросы