oracle 视图有感叹号,中间带很多!感叹号的地方怎么就是执行不到这里哦?

在Oracle存储过程中,遇到一个带有感叹号的视图在FOR循环中无法执行的问题。虽然在循环外的INSERT语句可以成功执行,但在FOR循环内的相同INSERT语句却无法执行。已确认查询条件和变量值没有问题。问题可能与循环内部的事务控制或数据处理有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE OR REPLACE PROCEDURE XYGMES.proc_sm_rpt_cbjs_calc (

v_sgid              IN       VARCHAR2,

v_mat_cat           IN       VARCHAR2,

v_mat_caltype       IN       VARCHAR2,

v_sg_weight         IN       NUMBER,

inmonthid           IN       VARCHAR2,

errmsg              OUT      VARCHAR2

)

AS

r_mat      sm_rpt_mat_seq%ROWTYPE;

v_price   NUMBER;

V_CAT_SL    NUMBER   :=0;

V_CAT_FEE   NUMBER   :=0;

V_CAT_PER_SL    NUMBER   :=0;

V_CAT_PER_FEE   NUMBER   :=0;

V_SL        NUMBER;

V_FEE       NUMBER;

V_PER_SL    NUMBER;

V_PER_FEE   NUMBER;

V_SG_SHOW   VARCHAR2(50);

V_MAT_SEQ   NUMBER;

BEGIN

IF v_mat_caltype=1

THEN

...........

ELSE

INSERT INTO MARKCT(ct,a,b,c,d,E)             --这一句特地用来标示的语句执行,但是从下一句for x  in () 开始,循环始终进不去

VALUES('befor for', v_sgid,v_mat_cat,v_mat_caltype,v_sg_weight,inmonthid);

commit;

-----这里开始进不去了------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

For  x in (  SELECT *

FROM sm_rpt_mat_seq

WHERE parent_id=v_mat_cat    --这段select 单独执行时可以查出记录集的。 条件变量取值也没问题。

)

LOOP

BEGIN

----MARK INSERT   ------------------------------------------------------------------------------------------------------------------------!!!!!!!!!!!!!!!!!!!!实在是不懂为什么这里无法执行。参数传过来也没有问题。

INSERT INTO MARKCT(ct,A,B,C,D,E)

VALUES('mx1',v_sgid,V_SG_SHOW,x.mat_id,v_sg_weight,V_SL);

INSERT INTO MARKCT(ct,A,B,C,D,E)

VALUES('mx2',V_SL,V_FEE,V_PER_SL,V_PER_FEE,V_MAT_SEQ);

commit;

END;

END LOOP;

----MARK INSERT     出了for loop 循环后,又可以成功执行语句,成功插入试验记录了。

INSERT INTO MARKCT(ct,A,B,C,D,E)

VALUES('cat',V_CAT_SL,V_CAT_FEE,V_CAT_PER_SL,V_CAT_PER_FEE,V_MAT_SEQ);

COMMIT;

END IF ;

COMMIT;

EXCEPTION

WHEN OTHERS

THEN   null;

END;

/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值