以下这个SQL我运行之后,报qryData:内部错误($172)
MERGE INTO dlvr_date_mng_hdr ddh
USING(
--SQL[5-1-1]
SELECT
iv.dlvr_date_mng_num dlvr_date_mng_num
, NVL(iv.dlvr_dely_day, 0) dlvr_dely_day
, NVL(iv.dlvr_dely_qty, 0) dlvr_dely_qty
, NVL(gdm.gnrl_cd, '0001') gnrl_cd
FROM
(
--SQL[5-1-2]
SELECT
dpw.dlvr_date_mng_num dlvr_date_mng_num
, dpw.dlvr_dely_day dlvr_dely_day
, dpw.dlvr_dely_qty dlvr_dely_qty
, dpw.dd_mng_mlstn_actl_flg dd_mng_mlstn_actl_flg
FROM
dlvr_date_mng_prd_wk dpw
WHERE
dpw.dd_mng_mlstn_prcs_trgt_flg = 'Y'
AND dpw.delete_flag = 'N'
UNION ALL
SELECT
dlvr_date_mng_num dlvr_date_mng_num
, dlvr_dely_day dlvr_dely_day
, dlvr_dely_qty dlvr_dely_qty
, dd_mng_mlstn_actl_flg dd_mng_mlstn_actl_flg
FROM
(
--SQL[5-1-3]
SELECT
dtw.dlvr_date_mng_num dlvr_date_mng_num
, MAX(dtw.dlvr_dely_day) dlvr_dely_day
, SUM(dtw.dlvr_dely_qty) dlvr_dely_qty
, DECODE(COUNT(DISTINCT dtw.dd_mng_mlstn_actl_flg ), 2, 'N', MIN(dtw.dd_mng_mlstn_actl_flg) ) dd_mng_mlstn_actl_flg
FROM
dlvr_date_mng_trnpt_wk dtw
WHERE
dtw.dd_mng_mlstn_prcs_trgt_flg = 'Y'
AND dtw.delete_flag = 'N'
GROUP BY
dtw.dlvr_date_mng_num
)
) iv
, gnrl_cd_dtl_m gdm
, dlvr_date_mng_hdr dmh
, gnrl_cd_dtl_m gdmw
WHERE
iv.dlvr_date_mng_num = dmh.dlvr_date_mng_num
AND gdm.delete_flag = 'N'
AND gdm.gnrl_cd_type_cd = 'PRD0018'
AND gdm.gnrl_cd_atrbt1 = 'Y'
AND gdm.gnrl_cd_atrbt2 = iv.dd_mng_mlstn_actl_flg
AND (gdm.gnrl_cd_atrbt3 IS NULL
OR gdm.gnrl_cd_atrbt3 = NVL(gdmw.gnrl_cd_atrbt3, 'N'))
AND gdmw.delete_flag = 'N'
AND gdmw.gnrl_cd_type_cd = 'PRD0018'
AND gdmw.gnrl_cd = dmh.dlvr_dely_alrt_type_cd
) ddmh
ON(
ddh.dlvr_date_mng_num = ddmh.dlvr_date_mng_num
AND ddh.glbl_bu_cd = '002'
AND ddh.delete_flag = 'N'
AND ddh.dlvr_date_mng_updt_flg = 'Y'
)
WHEN MATCHED THEN
UPDATE
SET
ddh.dlvr_dely_day = ddmh.dlvr_dely_day
, ddh.dlvr_dely_qty = ddmh.dlvr_dely_qty
, ddh.dlvr_dely_alrt_type_cd = ddmh.gnrl_cd
, ddh.update_user_id = 'SYS'
, ddh.update_date = SYSDATE;
MERGE INTO dlvr_date_mng_hdr ddh
USING(
--SQL[5-1-1]
SELECT
iv.dlvr_date_mng_num dlvr_date_mng_num
, NVL(iv.dlvr_dely_day, 0) dlvr_dely_day
, NVL(iv.dlvr_dely_qty, 0) dlvr_dely_qty
, NVL(gdm.gnrl_cd, '0001') gnrl_cd
FROM
(
--SQL[5-1-2]
SELECT
dpw.dlvr_date_mng_num dlvr_date_mng_num
, dpw.dlvr_dely_day dlvr_dely_day
, dpw.dlvr_dely_qty dlvr_dely_qty
, dpw.dd_mng_mlstn_actl_flg dd_mng_mlstn_actl_flg
FROM
dlvr_date_mng_prd_wk dpw
WHERE
dpw.dd_mng_mlstn_prcs_trgt_flg = 'Y'
AND dpw.delete_flag = 'N'
UNION ALL
SELECT
dlvr_date_mng_num dlvr_date_mng_num
, dlvr_dely_day dlvr_dely_day
, dlvr_dely_qty dlvr_dely_qty
, dd_mng_mlstn_actl_flg dd_mng_mlstn_actl_flg
FROM
(
--SQL[5-1-3]
SELECT
dtw.dlvr_date_mng_num dlvr_date_mng_num
, MAX(dtw.dlvr_dely_day) dlvr_dely_day
, SUM(dtw.dlvr_dely_qty) dlvr_dely_qty
, DECODE(COUNT(DISTINCT dtw.dd_mng_mlstn_actl_flg ), 2, 'N', MIN(dtw.dd_mng_mlstn_actl_flg) ) dd_mng_mlstn_actl_flg
FROM
dlvr_date_mng_trnpt_wk dtw
WHERE
dtw.dd_mng_mlstn_prcs_trgt_flg = 'Y'
AND dtw.delete_flag = 'N'
GROUP BY
dtw.dlvr_date_mng_num
)
) iv
, gnrl_cd_dtl_m gdm
, dlvr_date_mng_hdr dmh
, gnrl_cd_dtl_m gdmw
WHERE
iv.dlvr_date_mng_num = dmh.dlvr_date_mng_num
AND gdm.delete_flag = 'N'
AND gdm.gnrl_cd_type_cd = 'PRD0018'
AND gdm.gnrl_cd_atrbt1 = 'Y'
AND gdm.gnrl_cd_atrbt2 = iv.dd_mng_mlstn_actl_flg
AND (gdm.gnrl_cd_atrbt3 IS NULL
OR gdm.gnrl_cd_atrbt3 = NVL(gdmw.gnrl_cd_atrbt3, 'N'))
AND gdmw.delete_flag = 'N'
AND gdmw.gnrl_cd_type_cd = 'PRD0018'
AND gdmw.gnrl_cd = dmh.dlvr_dely_alrt_type_cd
) ddmh
ON(
ddh.dlvr_date_mng_num = ddmh.dlvr_date_mng_num
AND ddh.glbl_bu_cd = '002'
AND ddh.delete_flag = 'N'
AND ddh.dlvr_date_mng_updt_flg = 'Y'
)
WHEN MATCHED THEN
UPDATE
SET
ddh.dlvr_dely_day = ddmh.dlvr_dely_day
, ddh.dlvr_dely_qty = ddmh.dlvr_dely_qty
, ddh.dlvr_dely_alrt_type_cd = ddmh.gnrl_cd
, ddh.update_user_id = 'SYS'
, ddh.update_date = SYSDATE;
除了最后的update,单独执行都没有问题
SELECT
iv.dlvr_date_mng_num dlvr_date_mng_num
, NVL(iv.dlvr_dely_day, 0) dlvr_dely_day
, NVL(iv.dlvr_dely_qty, 0) dlvr_dely_qty
, NVL(gdm.gnrl_cd, '0001') gnrl_cd
FROM
(
--SQL[5-1-2]
SELECT
dpw.dlvr_date_mng_num dlvr_date_mng_num
, dpw.dlvr_dely_day dlvr_dely_day
, dpw.dlvr_dely_qty dlvr_dely_qty
, dpw.dd_mng_mlstn_actl_flg dd_mng_mlstn_actl_flg
FROM
dlvr_date_mng_prd_wk dpw
WHERE
dpw.dd_mng_mlstn_prcs_trgt_flg = 'Y'
AND dpw.delete_flag = 'N'
UNION ALL
SELECT
dlvr_date_mng_num dlvr_date_mng_num
, dlvr_dely_day dlvr_dely_day
, dlvr_dely_qty dlvr_dely_qty
, dd_mng_mlstn_actl_flg dd_mng_mlstn_actl_flg
FROM
(
--SQL[5-1-3]
SELECT
dtw.dlvr_date_mng_num dlvr_date_mng_num
, MAX(dtw.dlvr_dely_day) dlvr_dely_day
, SUM(dtw.dlvr_dely_qty) dlvr_dely_qty
, DECODE(COUNT(DISTINCT dtw.dd_mng_mlstn_actl_flg ), 2, 'N', MIN(dtw.dd_mng_mlstn_actl_flg) ) dd_mng_mlstn_actl_flg
FROM
dlvr_date_mng_trnpt_wk dtw
WHERE
dtw.dd_mng_mlstn_prcs_trgt_flg = 'Y'
AND dtw.delete_flag = 'N'
GROUP BY
dtw.dlvr_date_mng_num
)
) iv
, gnrl_cd_dtl_m gdm
, dlvr_date_mng_hdr dmh
, gnrl_cd_dtl_m gdmw
WHERE
iv.dlvr_date_mng_num = dmh.dlvr_date_mng_num
AND gdm.delete_flag = 'N'
AND gdm.gnrl_cd_type_cd = 'PRD0018'
AND gdm.gnrl_cd_atrbt1 = 'Y'
AND gdm.gnrl_cd_atrbt2 = iv.dd_mng_mlstn_actl_flg
AND (gdm.gnrl_cd_atrbt3 IS NULL
OR gdm.gnrl_cd_atrbt3 = NVL(gdmw.gnrl_cd_atrbt3, 'N'))
AND gdmw.delete_flag = 'N'
AND gdmw.gnrl_cd_type_cd = 'PRD0018'
AND gdmw.gnrl_cd = dmh.dlvr_dely_alrt_type_cd这个选出来是什么,看下你选出的结果,要不加个and rownum=1看下你的结果?试试用一条记录(AND gdmw.gnrl_cd= dmh.dlvr_dely_alrt_type_cd and rownum=1
)去执行此脚本,看下会不会出问题,估计是你数据的问题脚本看不出来问题,merge into如果源存在相同数据行时会有问题的,但报的错应不是这个
查出来的结果只有一条记录。
我用PL/SQL Developer执行我的语句就没有报错,但是用OB来运行就出我开始的错误,求解。