【问题标题】:Concatenate String with a column in trigger将字符串与触发器中的列连接起来
【发布时间】:2012-12-19 14:26:34
【问题描述】:

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

【问题讨论】:

    标签: oracle triggers


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      哪个部分不完全工作?因为你的触发器似乎工作得很好。

      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>
      

      【讨论】:

        【解决方案3】:

        这也可以正常工作:

        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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-11
          • 2022-08-04
          相关资源
          最近更新 更多