【发布时间】:2019-11-14 19:32:30
【问题描述】:
在测试中,我做了以下(有效):
create table testdata as select * from sometable;
create procedure testload as begin
delete from testdata;
insert into testdata select * from sometable;
end;
我对更复杂的查询使用了相同的结构。如果我运行“insert into testdata select [new query]”,它会将数据加载到表中。但是,当我使用新查询创建新的存储过程时,它会执行,但不会实际加载数据。
请注意,这个查询是交给我的,不是我自己写的。结果已经过验证,因此虽然我很欣赏有关如何清理代码的任何和所有建议,但我主要感兴趣的是启动存储过程并使用尽可能接近以下内容的代码运行。
select
CLAIM_ID
,INTERNAL_ID
,line
,VENDOR_GROUP
,case when (CLAIM_FORMAT_RULE+ POS_RULE + POS_TYPE_RULE+ POS_CODE_RULE+ MODIFIERS_RULE+ BILL_TYPE_RULE+ ATTENDING_PROV_RULE+ REFERRING_PROV_RULE) = 8 then 'Y' else 'N' end AUTH_FLAG
from
(
SELECT
AP.CLAIM_ID
,CLM1.INTERNAL_ID
, px.line
, DAT.VENDOR_GROUP
,MAX(CASE WHEN DAT.FORMAT_C IS NULL THEN 1 WHEN REPLACE(REPLACE(AP.CLAIM_FORMAT_C,1,'CMS'),2,'UB') = UPPER(DAT.FORMAT_C) THEN 1 else 0 END) AS CLAIM_FORMAT_RULE
,MAX(CASE WHEN DAT.POS_ID IS NULL THEN 1 WHEN EAF.INTERNAL_ID = DAT.POS_ID THEN 1 else 0 end ) AS POS_RULE
,MAX(CASE WHEN DAT.POS_TYPE_C IS NULL THEN 1 WHEN NVL(PX.POS_TYPE_C,0) NOT IN (20,23) THEN 1 WHEN CAST(PX.POS_TYPE_C AS VARCHAR(10)) = DAT.POS_TYPE_C THEN 1 else 0 END) AS POS_TYPE_RULE
,MAX(CASE WHEN DAT.PROC_CODE IS NULL THEN 1 WHEN DAT.PROC_CODE LIKE '%-%' AND EAP.PROC_CODE BETWEEN STRTOK(DAT.PROC_CODE,'-',1) AND STRTOK(DAT.PROC_CODE,'-',2) THEN 1 WHEN EAP.PROC_CODE = DAT.PROC_CODE THEN 1 else 0 END) AS POS_CODE_RULE
,MAX(CASE WHEN DAT.MODIFIER IS NULL THEN 1 WHEN DAT.MODIFIER = PX.MODIFIERS THEN 1 else 0 END) AS MODIFIERS_RULE
,MAX(CASE WHEN DAT.BILL_TYPE IS NULL THEN 1 WHEN DAT.BILL_TYPE LIKE '%-%' AND AP.TYPE_OF_BILL BETWEEN STRTOK(DAT.BILL_TYPE,'-',1) AND STRTOK(DAT.BILL_TYPE,'-',2) THEN 1 WHEN AP.TYPE_OF_BILL = DAT.BILL_TYPE THEN 1 else 0 END) AS BILL_TYPE_RULE
,MAX(CASE WHEN DAT.ATTENDING_PROV_NETWORK IS NULL THEN 1 WHEN DAT.ATTENDING_PROV_NETWORK = ALV.NET_AFFIL_LEVEL_C THEN 1 else 0 END) AS ATTENDING_PROV_RULE
,MAX(CASE WHEN DAT.REFERRING_PROV_NETWORK IS NULL THEN 1 WHEN DAT.REFERRING_PROV_NETWORK = RLV.NET_AFFIL_LEVEL_C THEN 1 else 0 END) AS REFERRING_PROV_RULE
FROM HCCLSC.AP_CLAIM AP
INNER JOIN HCCLSC.CLM_MAP CLM1 ON AP.CLAIM_ID=CLM1.CID --AND CLM1.INTERNAL_ID in ('363137412', '363149130')
INNER JOIN HCCLSC.CLARITY_VENDOR VEN ON AP.VENDOR_ID = VEN.VENDOR_ID
INNER JOIN HCCLSC.VENDOR_TAX_ID VTIN ON AP.VENDOR_ID = VTIN.VENDOR_ID
INNER JOIN KPBISC_GRP_NCAR.AUTH_EXCEPTIONS DAT ON VTIN.TAX_ID = DAT.VENDOR_TIN
LEFT JOIN HCCLSC.AP_CLAIM_PX PX ON AP.CLAIM_ID = PX.CLAIM_ID
LEFT JOIN HCCLSC.CLARITY_EAP EAP ON EAP.PROC_ID = PX.PROC_ID
LEFT JOIN HCCLSC.EAF_MAP EAF ON AP.LOC_ID = EAF.CID
LEFT JOIN HCCLSC.CLARITY_SER_NETAFF ALV ON AP.ATTEND_PROV_ID = ALV.PROV_ID AND ALV.LINE = 1
LEFT JOIN HCCLSC.CLARITY_SER_NETAFF RLV ON AP.REF_PROV_ID = RLV.PROV_ID AND ALV.LINE = 1
where
TRUNC(AP.DATE_RECEIVED) BETWEEN sysdate-60 AND sysdate and
COALESCE(AP.WORKFLOW_C,0)=0
and AP.STATUS_C in (2, 4, 3)
GROUP BY AP.CLAIM_ID,CLM1.INTERNAL_ID, px.line, DAT.VENDOR_GROUP
order by AP.CLAIM_ID , px.line
)
【问题讨论】:
-
我知道这听起来很简单,但是您是否在运行代码的同一会话中检查结果?您在问题中输入的匿名块中没有 COMMIT 语句。如果您从不同的会话进行检查(某些 IDE 为每个窗口创建一个新会话),您将看不到新插入的记录。
-
@del 这不是小事。我从不同的选项卡运行,但添加提交不起作用。尝试将提交添加到 proc 本身的末尾以及在执行 proc 时(begin proc; commit; end;),没有骰子。
标签: sql oracle stored-procedures