ORACLE触发码

时间:2015-04-08 15:20:46

标签: oracle triggers concatenation

我想在ORACLE数据库触发器中连接两个或三个字段,我必须编码并且工作正常..

这是一个片段

 tes.VAKEY := +:new.KUNNR || +:new.BANKS || +:new.BANKL || +:new.BANKN

所以,我在VAKEY中获得了KUNNR,BANKS,BANKL和BANKN的连接值,这是正确的,但问题是它会丢失尾随空格。

代表。

Value of KUNNR - 10 char = '0000001111' 
        Value of BANKS - 3 char = 'IN'
        Value of BANKL - 4 char = '1234'
        Value of BANKN - 6 char = '123456',

然后我得到VAKEY ='0000001111IN1234123456',所以3 char字段BANKS只有2个char值 但我想要VAKEY ='0000001111IN 1234123456','IN'之后的字段中的空格应该保留..

请帮助我。


 CREATE OR REPLACE TRIGGER ZIF_CU_KNBK_TRG AFTER
  INSERT OR
  UPDATE OR
  DELETE
    ON SAPSR3.KNBK FOR EACH ROW DECLARE tes SAPSR3.ZIFIM%ROWTYPE;
  BEGIN
    IF inserting THEN
      tes.MANDT := +:new.MANDT;
    elsif updating THEN
      tes.MANDT := +:new.MANDT;
    ELSE
      tes.MANDT := +:old.MANDT;
    END IF;
    tes.OBJTP := 'CU';
    LPAD(old.KUNNR,000010,'');
    LPAD(new.KUNNR,000010,'');
    LPAD(old.BANKS,000003,'');
    LPAD(new.BANKS,000003,'');
    LPAD(old.BANKL,000015,'');
    LPAD(new.BANKL,000015,'');
    LPAD(old.BANKN,000018,'');
    LPAD(new.BANKN,000018,'');
    IF inserting THEN
      tes.VAKEY := +:new.KUNNR || +:new.BANKS || +:new.BANKL || +:new.BANKN;
    elsif updating THEN
      tes.VAKEY := +:new.KUNNR || new.BANKS || +:new.BANKL || +:new.BANKN;
    ELSE
      tes.VAKEY := +:old.KUNNR || +:old.BANKS || +:old.BANKL || +:old.BANKN;
    END IF;
    tes.TIMSP := TO_CHAR(SYS_EXTRACT_UTC(SYSTIMESTAMP),'YYYYMMDDHH24MISSFF');
    tes.TABNM := 'KNBK';
    IF inserting THEN
      tes.UPDKZ := 'I';
    elsif updating THEN
      tes.UPDKZ := 'U';
    ELSE
      tes.UPDKZ := 'D';
    END IF;
    INSERT
    INTO
      SAPSR3.ZIFIM VALUES tes;
  END;
你能检查一下吗?如果我的syntaxx错误,我在SAP上使用ORACLE数据库,所以我无法检查服务器级别有什么问题,但是只有在添加了这个LPAD命令之后才会出现错误。


所以这是我最后的查询,我觉得它也应该有用,但由于某种原因它不起作用,我会尝试深入研究它,但是如果你能检查一下它会真的有用吗?

CREATE OR REPLACE TRIGGER ZIF_CU_KNBK_TRG AFTER INSERT OR UPDATE OR DELETE ON SAPSR3.KNBK FOR EACH ROW declare tes SAPSR3.ZIFIM%ROWTYPE; begin if inserting then tes.MANDT := +:new.MANDT; elsif updating then tes.MANDT := +:new.MANDT; else tes.MANDT := +:old.MANDT; end if; tes.OBJTP := 'CU'; if inserting then tes.VAKEY := +RPAD(:new.KUNNR,000010,'') || +RPAD(:new.BANKS,000003,'') || +RPAD(:new.BANKL,000015,'') || +RPAD(:new.BANKN,000018,''); elsif updating then tes.VAKEY := +RPAD(:new.KUNNR,000010,'') || +RPAD(:new.BANKS,000003,'') || +RPAD(:new.BANKL,000015,'') || +RPAD(:new.BANKN,000018,''); else tes.VAKEY := +RPAD(:old.KUNNR,000010,'') || +RPAD(:old.BANKS,000003,'') || +RPAD(:old.BANKL,000015,'') || +RPAD(:old.BANKN,000018,''); end if; tes.TIMSP := to_char(SYS_EXTRACT_UTC(SYSTIMESTAMP),'YYYYMMDDHH24MISSFF'); tes.TABNM := 'KNBK'; if inserting then tes.UPDKZ := 'I'; elsif updating then tes.UPDKZ := 'U'; else tes.UPDKZ := 'D'; end if; insert into SAPSR3.ZIFIM values tes; end; 

1 个答案:

答案 0 :(得分:0)

使用RPAD(BANKS,3,' ')

这个"垫"字段的结尾使用空格为3个字符,但仅当字段中的值小于3个字符

还有一个LPAD选项从字段前面填充