Oracle 样本数据-“;执行包含update和insert语句的存储过程时发出;
下面是关于“执行包含update和insert语句的存储过程时出现问题”的问题的示例表和文件详细信息。以下是我在执行过程之前遵循的步骤Oracle 样本数据-“;执行包含update和insert语句的存储过程时发出;,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,下面是关于“执行包含update和insert语句的存储过程时出现问题”的问题的示例表和文件详细信息。以下是我在执行过程之前遵循的步骤 我将从供应商处获得一个文件,其中包含以下格式的数据 6437,,01/01/2017,3483.92,, 14081,,01/01/2017,8444.23,, LSE_ID AST_ID PRPRTY_TAX_DDCTN_CD LIEN_DT ASES_PRT_1_AM ASES_PRT_2_AM 5868087 5049 Null
6437,,01/01/2017,3483.92,,
14081,,01/01/2017,8444.23,,
LSE_ID AST_ID PRPRTY_TAX_DDCTN_CD LIEN_DT ASES_PRT_1_AM ASES_PRT_2_AM
5868087 5049 Null 01-01-2017 3693.3 NULL
NMAC\u PTMS\u NOTEBK\u SG
。在上述文件中,第一列将是资产lse_id
的额外列更新该表。现在NMAC\u PTMS\u NOTEBK\u SG
表中的数据格式如下
6437,,01/01/2017,3483.92,,
14081,,01/01/2017,8444.23,,
LSE_ID AST_ID PRPRTY_TAX_DDCTN_CD LIEN_DT ASES_PRT_1_AM ASES_PRT_2_AM
5868087 5049 Null 01-01-2017 3693.3 NULL
NMAC\u PTMS\u NOTEBK\u SG
中获取lse\u id
,并在MJL
表中比较相同的值(此处lse\u id=app\u lse\u s
)。以下是MJL表的结构
CREATE TABLE LPR_LP_TEST.MJL
(
APP_LSE_S CHAR(10 BYTE) NOT NULL,
DT_ENT_S TIMESTAMP(3) NOT NULL,
DT_FOL_S TIMESTAMP(3),
NOTE_TYPE_S CHAR(4 BYTE) NOT NULL,
PRCS_C CHAR(1 BYTE) NOT NULL,
PRIO_C CHAR(1 BYTE) NOT NULL,
FROM_S CHAR(3 BYTE) NOT NULL,
TO_S CHAR(3 BYTE) NOT NULL,
NOTE_TITLE_S VARCHAR2(41 BYTE) NOT NULL,
INFO_S VARCHAR2(4000 BYTE),
STAMP_L NUMBER(10) NOT NULL,
PRIVATE_C CHAR(1 BYTE),
LSE_ACC_C CHAR(1 BYTE),
COL_STAT_S CHAR(4 BYTE),
INFO1_S VARCHAR2(250 BYTE),
INFO2_S VARCHAR2(250 BYTE),
INFO3_S VARCHAR2(250 BYTE),
INFO4_S VARCHAR2(250 BYTE),
NTBK_RSN_S CHAR(4 BYTE)
)
TABLESPACE LPR_LP_TEST
PCTUSED 0
PCTFREE 25
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
CREATE UNIQUE INDEX LPR_LP_TEST.MJL_IDX0 ON LPR_LP_TEST.MJL
(APP_LSE_S, DT_ENT_S)
LOGGING
TABLESPACE LPR_LP_TEST
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;
CREATE OR REPLACE TRIGGER LPR_LP_TEST."MT_MJL_AIUD"
AFTER INSERT OR UPDATE OR DELETE ON mjl
BEGIN
mpkg_trig_mjl.mp_mjl_aiud;
END mt_mjl_aiud;
/
CREATE OR REPLACE TRIGGER LPR_LP_TEST."MT_MJL_AIUDR"
AFTER INSERT OR UPDATE OR DELETE ON mjl FOR EACH ROW
BEGIN
mpkg_trig_mjl.mp_mjl_aiudr (INSERTING, UPDATING, DELETING,
:NEW.app_lse_s, :NEW.prcs_c, :NEW.note_type_s,
:OLD.app_lse_s, :OLD.prcs_c, :OLD.note_type_s);
END mt_mjl_aiudr;
/
CREATE OR REPLACE TRIGGER LPR_LP_TEST."MT_MJL_BIUD"
BEFORE INSERT OR UPDATE OR DELETE ON mjl
BEGIN
mpkg_trig_mjl.mp_mjl_biud;
END mt_mjl_biud;
/
CREATE OR REPLACE TRIGGER LPR_LP_TEST."MT_MJL_OBIUR"
BEFORE INSERT OR UPDATE ON mjl FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.stamp_l := mpkg_util.mp_time_ticker;
ELSE
IF :OLD.stamp_l > 999999990 THEN
:NEW.stamp_l := 1;
ELSE
:NEW.stamp_l := :OLD.stamp_l + 1;
END IF;
END IF;
END mt_mjl_obiur;
/
lse\u id
已保存到过程中lse\u id
与中的应用程序匹配
然后,我需要更新该行和一些已编码的数据
我正在正确地执行的字段
lse_id
不匹配,那么我必须为此插入一个新行
租约和硬编码字段mjl
表中的dt\u entu s
是一个
唯一约束李>
请让我知道上述内容是否对您有意义
“我面临的问题是mjl表中的dt是一个独特的约束。”
实际上它不是,它是复合唯一键的一部分。所以你的ON子句应该匹配ON
on (tgt.app_lse_s = src.app_lse_s
and tgt.dt_ent_s = src.dt_ent_s)
顺便说一句,ON子句中trim()
的使用令人担忧,尤其是trim(tgt.app\u lse)
。如果插入带有尾随空格或前导空格的值,则修剪这些值时,“唯一键”将产生多个点击。从文件加载数据并在表中插入修剪后的值时,应修剪空格
“ORA-00001:违反唯一约束(LPR_LP_TEST.MJL_IDX0)”
MJL_IDX0
必须给我一个唯一的索引。这意味着您需要在考虑唯一记录时包括其列
显然,直接插入逻辑和合并插入逻辑之间存在差异。你需要比较这两种说法,找出区别
“我面临的问题是mjl表中的dt是一个独特的约束。”
实际上它不是,它是复合唯一键的一部分。所以你的ON子句应该匹配ON
on (tgt.app_lse_s = src.app_lse_s
and tgt.dt_ent_s = src.dt_ent_s)
顺便说一句,ON子句中trim()
的使用令人担忧,尤其是trim(tgt.app\u lse)
。如果插入带有尾随空格或前导空格的值,则修剪这些值时,“唯一键”将产生多个点击。从文件加载数据并在表中插入修剪后的值时,应修剪空格
“ORA-00001:违反唯一约束(LPR_LP_TEST.MJL_IDX0)”
MJL_IDX0
必须给我一个唯一的索引。这意味着您需要在考虑唯一记录时包括其列
显然,直接插入逻辑和合并插入逻辑之间存在差异。您需要比较这两种说法,找出区别所在。您能按程序的格式代码编辑问题吗?@Nitish。我试图更改过程的格式代码。位它没有反映…你能按程序的格式代码编辑问题吗?@Nitish。我试图更改过程的格式代码。比特它没有反映…我在这里得到一个错误。插入时抛出ORA-00001:违反了唯一约束(LPR_LP_TEST.MJL_IDX0)。我检查了MJL表,并为此创建了一个索引。我的问题是,当我尝试使用普通的insert语句插入记录时,它工作了,但在merge语句中没有。你能帮我解决这个问题吗?现在我在执行这个过程时发现了以下错误。你能检查一下这个吗。03494开始SP_PTMS_注释(“03494”);完;*第1行错误:ORA-30926:无法在源表ORA-06512:第18行“LPR_LP_TEST.SP_PTMS_NOTES”中获得一组稳定的行。ORA-06512:第1行请阅读我的答案。如果这不能帮助你解决问题,你需要问一个新问题,发布你的合并语句和一小部分复制问题的样本数据。我在这里又遇到了一个错误。插入时抛出ORA-00001:违反了唯一约束(LPR_LP_TEST.MJL_IDX0)。我检查了MJL表,并为此创建了一个索引。我的问题是,当我尝试使用普通的insert语句插入记录时,它工作了,但在merge语句中没有。你能帮我解决这个问题吗?现在我在执行这个过程时发现了以下错误。你能检查一下这个吗。03494开始SP_PTMS_注释(“03494”);完;*第1行错误:ORA-30926:无法在源表ORA-06512:第18行“LPR_LP_TEST.SP_PTMS_NOTES”中获得一组稳定的行。ORA-06512:第1行请阅读我的答案。如果这不能帮助您解决问题,您将需要提出一个新问题,发布合并语句和一小部分复制问题的示例数据。