我想在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;
答案 0 :(得分:0)
使用RPAD(BANKS,3,' ')
这个"垫"字段的结尾使用空格为3个字符,但仅当字段中的值小于3个字符
时还有一个LPAD
选项从字段前面填充