2010-09-24 4 views
2

Est-il possible de créer une table avec une colonne qui combine deux valeurs de colonne? quelque chose comme ceci:Créer une table avec la valeur par défaut qui combine deux colonnes

create table test1 ( décimale numéro1 (6,2), décimal number2 (6,2), décimale totale (6,2) DEFAULT (nombre1 + nombre2) );

+0

Avez-vous besoin de la possibilité d'affecter une valeur différente à cette colonne? ou est-ce suffisant pour l'avoir toujours calculé de cette façon? –

Répondre

0

Vous pouvez le faire en utilisant un déclencheur:

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; 

Après SELECT vous verrez que TOTAL a une valeur de 3, comme prévu.

Partagez et appréciez.

0

Vous devez utiliser des colonnes calculées.

5

Oui, en 11G. C'est ce qu'on appelle une colonne "virtuelle". La syntaxe est:

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

(Il n'y a pas un type de données DECIMAL dans Oracle AFAIK, donc j'utilisé NUMBER à la place.)

Voir aussi: documentation

NB Les mots-clés "générés toujours" sont optionnel. Les types d'expression autorisés après "as" sont décrits here.

+1

Juste un aparté - DECIMAL fonctionne très bien dans Oracle, mais je crois qu'il est traduit en NUMBER en interne. –

+0

Vous avez raison, je n'étais pas au courant de cela. –

+0

merci, cela fonctionne parfaitement! – Jay

Questions connexes