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;
/