Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORACLE触发器代码_Oracle_Triggers_Concatenation - Fatal编程技术网

ORACLE触发器代码

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

我想在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 - 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;