1

データシートを使用して、Oracle Apex ユーティリティからデータをロードしています。

ロードされたデータからテーブルの値をチェックし、取得した内容に応じて値を変更するトリガーを作成したいと考えています。

テーブルには、id、name、email、type の 4 つの列があります。

ロードするデータは次のようなものです: name,email,type

今私のトリガー:

create or replace TRIGGER  BI_USER
before insert ON USER               
for each row  

declare
begin   
  if :NEW.ID is null then
    select USERID_SEQ.nextval into :NEW.ID from dual;
  end if;
 :NEW.TYPE := 'something else';
end; 

ID はうまく機能し、シーケンスから番号を取得しますが、:new.type は機能せず、変更されません。また、SQL 挿入を個別に実行すると、同じことが起こります。

編集: new.type タイプは char(1) です。テスト用にこのように書きましたが、変更されません...ああ、私は自分自身に失望しています。データを読み取った直後にエラーがスローされ、引き金。

私がやろうとしていたのは、TYPE列の名前を持ち、そのテーブルのIDをNEW.typeに入れることです

NEWタイプを変更する方法はありますか?

4

2 に答える 2

2

私はあなたがやろうとしていることを見ます。いずれかのフィールドの幅に収まらないデータを含む挿入レコードをテーブルで受け入れ、データが収まるようにトリガーを使用してデータを「修正」したいと考えています。

残念ながら、トリガーが起動される前にデータが検証されるため、このトリガーは役に立ちません。

これを回避する別の方法は、代わりにトリガーを持つビューを使用することです。ビューには、長さ 9 の文字列に基づく列「TYPE」があります。代わりのトリガーは、これを CHAR(1) に変換して、基になるテーブルに挿入します。

于 2012-05-24T01:56:53.240 に答える
0

代わりにこれを試してください:

select 'something else' into :NEW.TYPE from dual;

この構文が機能する場合、IDそれも機能するはずですTYPE

于 2012-05-21T23:47:27.813 に答える