1

studentsOracle データベースに というフィールドを持つテーブルがありますRECORD_NUMBER0このフィールドの長さは 8 文字で、挿入時に左側の部分に s を埋め込むトリガーを作成したいと考えています。これは私がこれまでに持っているものです:

create or replace
TRIGGER STUDENTS_RECORD_NUMBER_TRG 
BEFORE INSERT OR UPDATE OF RECORD_NUMBER ON TBL_STUDENTS 
FOR EACH ROW
BEGIN
  WHILE length(:new.RECORD_NUMBER) < 9
    LOOP
      :new.RECORD_NUMBER := LPAD(:new.RECORD_NUMBER,8,'0');
    END LOOP;
  NULL;
END;

ただし、行を挿入しようとすると、データベース接続がロックされ、再び使用するには Oracle を再起動する必要があります。このトリガーが無限ループを引き起こしている可能性はありますか?

4

2 に答える 2

2

の場合record_number、常に 9 未満になり、ループは無限に繰り返されますvarchar2(8)length(:new.record_number)ただし、ここでループは必要ありません。呼び出すだけですLPAD

create or replace TRIGGER STUDENTS_RECORD_NUMBER_TRG 
  BEFORE INSERT OR UPDATE OF RECORD_NUMBER 
  ON TBL_STUDENTS 
  FOR EACH ROW
BEGIN
  :new.RECORD_NUMBER := LPAD(:new.RECORD_NUMBER,8,'0');
END;

もちろん、これは、LPADビュー レイヤーに . 一般に、ビューはプレゼンテーション ロジックの実装に優れているため、この種のプレゼンテーション ロジックをビューに配置した方がよいと思います。しかし、このトリガーは、あなたが求めたことを実行する必要があります。

于 2012-12-03T15:26:12.087 に答える
0

エントリを数字のままにします。ゼロを埋め込んで表示する必要がある場合は、表示ロジックの一部として行います。

于 2012-12-03T15:32:26.790 に答える