2012-12-19 31 views
1

我有一个名为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; 

我的意思` “中科院 - ” + “fld_id”= “CAS-fld_id””

回答

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> 
1

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

:NEW.FLD_CAS_CODE := 'CAS-'||TRIM(TO_CHAR (:NEW.FLD_ID)); 
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;