2016-12-11 2 views
-1

トリガの概念を把握したり、私の場合に使用する方法を完全にはっきりと理解することが困難です。CHECKで選択しますか?トリガーで?

ここにあります私のこれまでのCREATE:私は何を達成したいことはStation.tarifとActivite.prix上の制約がある

CREATE TABLE Station 
( 
nomStation VARCHAR2(100), 
capacite NUMBER(5) NOT NULL, 
lieu VARCHAR2(100) NOT NULL, 
region VARCHAR2(100), 
tarif NUMBER(6,2) DEFAULT 0, 
PRIMARY KEY (nomStation), 
CONSTRAINT UC_lieu_region UNIQUE (lieu, region), 
CONSTRAINT regionUnique CHECK (region='Ocean Indien' OR 
           region='Antilles' OR 
           region='Europe' OR 
           region='Ameriques' OR 
           region='Extreme Orient') 
); 

CREATE TABLE Activite 
( 
nomStation VARCHAR2(100), 
libelle VARCHAR2(100), 
prix NUMBER(6,2) DEFAULT 0, 
CONSTRAINT PK_nomStation_libelle PRIMARY KEY (nomStation, libelle), 
CONSTRAINT FK_nomStation FOREIGN KEY (nomStation) REFERENCES Station(nomStation) ON DELETE CASCADE 
); 

Activite.prix < Station.tarif && Activite.prix > 0 

だから当然、私はこの試みた:

CONSTRAINT CH_prix CHECK (prix<(SELECT tarif FROM Station)), 

をしかし、私はサブクエリエラーを取得します。 ...

誰もがUsing subquery in a Check statement in Oracle

涼しいですが、残念ながら、私は新人だと私はトリガーが私を助けることができる方法を見ていない:今、私はこのトピックと同じ問題を持っていることを理解できますか?

+0

これは学校の割り当てか製造上の問題ですか?それが学校の場合、教師/インストラクターに最初に尋ねましたか?それがプロダクションであれば、これ以上経験を積んだ人はいないでしょうか? – mathguy

+0

学校の割り当てです。そうではありません、私は英語では、それがあなたの質問ならば、それは不正行為ではないと言う方法を知っていません。これは私の最終学年やメモなどの一部ではありません。私たちは、stackoverflowの助けを借りて、自分自身で解決策を見つけなければなりません。私は解決策がトリガーに基づいていることを知っている、私はちょうどどのように理解していない... – petaire

+0

こんにちは、私はこれが不正を意味していませんでした。私が意味していたことは、生徒が質問をしたときはいつでも、教師に尋ねることができるということでした(私は先生でしたが、なぜ生徒に他の手段を使用するのか理解できませんでした。)授業でトリガーをまだ勉強しましたか? – mathguy

答えて

1

このようにtriggerを作成できます。

Create or replace trigger tr_activite_prix 
Before insert or update of prix on activite for each row 
is 
v_tarrif station.tarrif%type; 
Begin 
    Select tarrif into v_tarrif 
    From station 
    Where nomstation = :new.nomstation; 
    If :new.prix >= v_tarrif then 
     raise_application_error(-20001,'Invalid prix'); 
    End if; 
End; 
+0

トリガー名に ' - 'の代わりにアンダースコアを使用し、 'for each row'部分を使用します。他の賢明なあなたは使用することができません:新しいと:古い – GurV

+0

(私はコードの可用性のための新しい答えで答えた) – petaire

+0

ああえええええええええええええええええええと、回答を編集中です! – petaire

関連する問題