ORACLE触发器代码
我想在OracleDatbase触发器中连接两个或三个字段,我必须编码,并且工作正常 这里是一个片段ORACLE触发器代码,oracle,triggers,concatenation,Oracle,Triggers,Concatenation,我想在OracleDatbase触发器中连接两个或三个字段,我必须编码,并且工作正常 这里是一个片段 tes.VAKEY := +:new.KUNNR || +:new.BANKS || +:new.BANKL || +:new.BANKN 所以,我得到了VAKEY中KUNNR、BANKS、BANKL和BANKN的串联值,这是正确的,但问题是它会释放尾随空间 例如 Value of KUNNR - 10 char = '0000001111' Value of BANKS
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='0000001111in1234456',因此3个字符字段组只有一个2个字符的值
但是我想VAKEY='0000001111IN 1234123456',应该保留'in'后面字段中的空格
请帮我做这个
你能检查一下这个吗?如果我的syntaxx错误,我在SAP上使用ORACLE数据库,因此我无法在服务器级别检查错误,但erorrs仅在添加此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;
使用RPAD(气缸组,3'')
仅当字段中的值短于3个字符时,才使用空格将字段结尾“填充”为3个字符
还有一个从字段前面填充的
LPAD
选项您的LPAD不正确,并且在错误的位置,如果插入tes.VAKEY,则需要执行以下操作:=+RPAD(:new.KUNNR,10',)|+RPAD(:new.BANKS,3',)|+RPAD(:new.BANKL,4',)|+RPAD(:new.BANKN,6',);您的最新代码出现了什么错误?我注意到您的最新代码有一点,引号之间没有空格,因此“”应该是“”
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;