2010-09-24 4 views
2

Возможно ли создать таблицу с столбцом, который объединяет два значения столбца? что-то вроде этого:создать таблицу со значением по умолчанию, которая объединяет два столбца

создать таблицу test1 ( Number1 десятичной (6,2), number2 десятичной (6,2), общее десятичное (6,2) DEFAULT (number1 + number2) );

+0

Вам нужна возможность присвоить другое значение этому столбцу? или достаточно, чтобы он всегда вычислялся именно так? –

ответ

0

Вы можете сделать это с помощью триггера:

create table test1 
    (number1 decimal(6,2), 
    number2 decimal(6,2), 
    total decimal(6,2)); 

CREATE TRIGGER test1_bi 
    BEFORE INSERT ON test1 
    FOR EACH ROW 
BEGIN 
    IF :new.total is NULL THEN 
    :NEW.TOTAL := :new.number1 + :new.number2; 
    END IF; 
END test1_bi; 

INSERT INTO test1(number1, number2) VALUES(1, 2); 

SELECT * FROM test1; 

После SELECT, вы обнаружите, что TOTAL имеет значение 3, как и ожидалось.

Делитесь и наслаждайтесь.

0

Вам необходимо использовать вычисленные столбцы.

5

Да, в 11G. Он называется «виртуальным» столбцом. Синтаксис:

create table test1 
(number1 number(6,2), 
    number2 number(6,2), 
    total number(6,2) generated always as (number1+number2)); 

(Существует не DECIMAL тип данных в Oracle AFAIK, поэтому я использовал вместо номера.)

Смотрите также: documentation

Н.Б. "сгенерированные всегда" ключевые слова необязательный.

Типы выражения, разрешенные после «как», описаны here.

+1

Просто в стороне - DECIMAL отлично работает в Oracle, но я считаю, что он переведен на NUMBER внутренне. –

+0

Вы правы, я не знал об этом. –

+0

спасибо, это работает отлично! – Jay

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