将字符串与触发器中的列连接

时间:2012-12-19 14:26:35

标签: oracle triggers

我有一张名为TBL_CAS的表。其中,FLD_ID作为自动增量列,另一列称为FLD_CAS_CODE。现在我需要将CAS-作为前缀添加到FLD_ID并插入到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”'

3 个答案:

答案 0 :(得分:1)

您不需要将TO_CHAR()放在已经是字符数据类型的东西周围。但是你应该转换数字标识符(而不是依赖于隐式转换):

:NEW.FLD_CAS_CODE := 'CAS-'||TRIM(TO_CHAR (:NEW.FLD_ID));

答案 1 :(得分: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>

答案 2 :(得分: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;