1

TBL_CAS というテーブルがあります。その中で、FLD_ID を自動インクリメント列として、もう 1 つの列を FLD_CAS_CODE と呼びます。ここで、FLD_ID にプレフィックスとして追加CAS-し、FLD_CAS_CODE に挿入する必要があります。これをトリガーで行う必要があります。以下のコードで試してみましたが、データが挿入されません.何が問題なのですか?

CREATE OR REPLACE TRIGGER TBL_CAS_TRG
BEFORE  INSERT ON TBL_CAS
FOR EACH ROW
BEGIN
:NEW.FLD_CAS_CODE := TO_CHAR ('CAS')||'-'||:NEW.FLD_ID;
END;

「cas-」+「fld_id」="cas-fld_id"' という意味です

4

3 に答える 3

1

すでに文字データ型になっているものの周りに TO_CHAR() を配置する必要はありません。ただし、(暗黙的な変換に頼るのではなく) 数値識別子をキャストする必要があります。

:NEW.FLD_CAS_CODE := 'CAS-'||TRIM(TO_CHAR (:NEW.FLD_ID));
于 2012-12-19T14:36:17.047 に答える
0

どの部分が正確に機能していませんか?トリガーは問題なく機能しているようです。

SQL> create table TBL_CAS( FLD_ID number, FLD_CAS_CODE varchar2(20));

Table created.

SQL> CREATE OR REPLACE TRIGGER TBL_CAS_TRG
  2  BEFORE  INSERT ON TBL_CAS
  3  FOR EACH ROW
  4  BEGIN
  5  :NEW.FLD_CAS_CODE := TO_CHAR ('CAS')||'-'||:NEW.FLD_ID;
  6  END;
  7  /

Trigger created.

SQL> insert into TBL_CAS (fld_id) values (1001);

1 row created.

SQL> select * From TBL_CAS;

    FLD_ID FLD_CAS_CODE
---------- --------------------
      1001 CAS-1001

SQL>
于 2012-12-19T14:34:31.260 に答える
0

これもうまくいきます:

CREATE OR REPLACE TRIGGER  TBL_AREA_CODES_TRG 
BEFORE  INSERT ON   TBL_AREA_CODES
FOR EACH ROW
BEGIN
  :NEW.OBRM_AREA_CODE :=  :NEW.STATE_CODE ||'-'||:NEW.DIST_CODE ||'-'||:NEW.CITY_CODE ||'-'||:NEW.AREA_CODE ;
END;
于 2016-01-05T13:56:40.437 に答える