S
Suky305
Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个Oracle Procedure
(V_RQ in DATE,
V_ZQDM in VARCHAR2,
V_GDDM in VARCHAR2,
V_GDXM in VARCHAR2 default '',
V_GSDM in VARCHAR2,
V_BCJSL in FLOAT,
V_BCJJE in FLOAT,
V_SCJSL in FLOAT,
V_SCJJE in FLOAT,
V_BCYE in FLOAT)
IS
sqlstr varchar2(300);
V_Cursor number;
V_NumRows Integer;
l_RQ date;
stepPoint varchar2(300);
l_zqdm s_gdccall.zqdm%type;
l_gddm s_gdccall.gddm%type;
l_bcjslall s_gdccall.bcjslall%type;
l_bcjjeall s_gdccall.bcjjeall%type;
l_scjslall s_gdccall.scjslall%type;
l_scjjeall s_gdccall.scjjeall%type;
Cursor C_S_GDCCALL is
Select RQ,bcjslall,bcjjeall,scjslall,scjjeall from S_GDCCALL where zqdm= l_ZQDM and GDDM = l_GDDM;
BEGIN
-- savepoint A;
StepPoint := '插入S_GDHZALL时RQ= '||V_RQ||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||'时';
-- insert into s_GDHZALL (rq,gddm,gdxm,gsdm,zqdm,bcjsl,bcjje,scjsl,scjje,bcye) values (V_rq,V_gddm,V_gdxm,V_gsdm,V_zqdm,V_bcjsl,V_bcjje,V_scjsl,V_scjje,V_bcye);
sqlstr := 'insert into s_GDHZ'||V_zqdm||' (rq,gddm,gdxm,gsdm,zqdm,bcjsl,bcjje,scjsl,scjje,bcye)
values (to_date('||''''||to_char(v_RQ,'yyyymmdd')||''''||','||''''||'yyyymmdd'||''''||'),'||''''||V_GDDM||''''||','||''''||V_GDXM||''''||','||''''||V_GSDM||''''||','||''''||V_GSDM||''''||','||V_bcjsl||','||V_bcjje||','||V_scjsl||','||V_scjje||','||V_bcye||')';
v_cursor := DBMS_SQL.OPEN_CURSOR;
StepPoint :='在分析表S_GDHZ'||V_zqdm||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
DBMS_SQL.PARSE(v_CURSOR,SQLSTR,DBMS_SQL.V7);
StepPoint := '打开游标,插入表'||v_ZQDM||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
V_NumRows:=DBMS_SQL.EXECUTE(V_CURSOR);
insert into s_err_info (errstr) values (v_cursor);
DBMS_SQL.Close_Cursor(v_Cursor);
/* l_zqdm := v_zqdm;
l_gddm := v_gddm;
StepPoint := '查询表s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
open C_S_GDCCALL;
Fetch c_S_GDCCALL into l_RQ,l_bcjslall,l_bcjjeall,l_scjslall,l_scjjeall;
if C_S_GDCCALL%notfound then
StepPoint := '插入表s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
Insert into s_GDCCALL (rq,gddm,gdxm,gsdm,zqdm,bcjsl,bcjslall,bcjje,bcjjeall,scjsl,scjslall,scjje,scjjeall,bcye) values (V_rq,V_gddm,V_gdxm,V_gsdm,V_zqdm,V_bcjsl,v_bcjsl,V_bcjje,v_bcjje,V_scjsl,v_scjsl,V_scjje,v_scjje,V_bcye);
Else
if l_RQ < v_RQ then
StepPoint := '记录全部,更新s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
update s_gdccall set RQ = v_RQ,bcjsl = v_bcjsl,bcjslall = V_bcjsl+l_bcjslall,bcjje = v_bcjje,bcjjeall = v_bcjje+l_bcjjeall,scjsl=v_scjsl,scjslall = v_scjsl + l_scjslall,scjje = v_scjje,scjjeall = v_scjje+l_scjjeall,bcye = v_bcye where
zqdm = v_zqdm and gddm = v_gddm;
else
StepPoint := '更新一部分,更新表s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
update s_gdccall set bcjslall = V_bcjsl+l_bcjslall,bcjjeall = v_bcjje+l_bcjjeall,scjslall = v_scjsl + l_scjslall,scjjeall = v_scjje+l_scjjeall where
zqdm = v_zqdm and gddm = v_gddm;
end if;
end if;
close c_S_GDCCALL; */
-- commit;
Exception
When OTHERS THEN
-- RollBack to A;
insert into suky.s_err_info (ErrStr,zqdm) values (StepPoint||' RQ='||To_Char(V_RQ,'yyyy-mm-dd'),V_zqdm);
commit;
END;
当插入到230条记录的时候出现:超出打开最大游标数的error,可是我每次都已经关闭Cursor了,
请问是怎么回事?
(V_RQ in DATE,
V_ZQDM in VARCHAR2,
V_GDDM in VARCHAR2,
V_GDXM in VARCHAR2 default '',
V_GSDM in VARCHAR2,
V_BCJSL in FLOAT,
V_BCJJE in FLOAT,
V_SCJSL in FLOAT,
V_SCJJE in FLOAT,
V_BCYE in FLOAT)
IS
sqlstr varchar2(300);
V_Cursor number;
V_NumRows Integer;
l_RQ date;
stepPoint varchar2(300);
l_zqdm s_gdccall.zqdm%type;
l_gddm s_gdccall.gddm%type;
l_bcjslall s_gdccall.bcjslall%type;
l_bcjjeall s_gdccall.bcjjeall%type;
l_scjslall s_gdccall.scjslall%type;
l_scjjeall s_gdccall.scjjeall%type;
Cursor C_S_GDCCALL is
Select RQ,bcjslall,bcjjeall,scjslall,scjjeall from S_GDCCALL where zqdm= l_ZQDM and GDDM = l_GDDM;
BEGIN
-- savepoint A;
StepPoint := '插入S_GDHZALL时RQ= '||V_RQ||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||'时';
-- insert into s_GDHZALL (rq,gddm,gdxm,gsdm,zqdm,bcjsl,bcjje,scjsl,scjje,bcye) values (V_rq,V_gddm,V_gdxm,V_gsdm,V_zqdm,V_bcjsl,V_bcjje,V_scjsl,V_scjje,V_bcye);
sqlstr := 'insert into s_GDHZ'||V_zqdm||' (rq,gddm,gdxm,gsdm,zqdm,bcjsl,bcjje,scjsl,scjje,bcye)
values (to_date('||''''||to_char(v_RQ,'yyyymmdd')||''''||','||''''||'yyyymmdd'||''''||'),'||''''||V_GDDM||''''||','||''''||V_GDXM||''''||','||''''||V_GSDM||''''||','||''''||V_GSDM||''''||','||V_bcjsl||','||V_bcjje||','||V_scjsl||','||V_scjje||','||V_bcye||')';
v_cursor := DBMS_SQL.OPEN_CURSOR;
StepPoint :='在分析表S_GDHZ'||V_zqdm||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
DBMS_SQL.PARSE(v_CURSOR,SQLSTR,DBMS_SQL.V7);
StepPoint := '打开游标,插入表'||v_ZQDM||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
V_NumRows:=DBMS_SQL.EXECUTE(V_CURSOR);
insert into s_err_info (errstr) values (v_cursor);
DBMS_SQL.Close_Cursor(v_Cursor);
/* l_zqdm := v_zqdm;
l_gddm := v_gddm;
StepPoint := '查询表s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
open C_S_GDCCALL;
Fetch c_S_GDCCALL into l_RQ,l_bcjslall,l_bcjjeall,l_scjslall,l_scjjeall;
if C_S_GDCCALL%notfound then
StepPoint := '插入表s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
Insert into s_GDCCALL (rq,gddm,gdxm,gsdm,zqdm,bcjsl,bcjslall,bcjje,bcjjeall,scjsl,scjslall,scjje,scjjeall,bcye) values (V_rq,V_gddm,V_gdxm,V_gsdm,V_zqdm,V_bcjsl,v_bcjsl,V_bcjje,v_bcjje,V_scjsl,v_scjsl,V_scjje,v_scjje,V_bcye);
Else
if l_RQ < v_RQ then
StepPoint := '记录全部,更新s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
update s_gdccall set RQ = v_RQ,bcjsl = v_bcjsl,bcjslall = V_bcjsl+l_bcjslall,bcjje = v_bcjje,bcjjeall = v_bcjje+l_bcjjeall,scjsl=v_scjsl,scjslall = v_scjsl + l_scjslall,scjje = v_scjje,scjjeall = v_scjje+l_scjjeall,bcye = v_bcye where
zqdm = v_zqdm and gddm = v_gddm;
else
StepPoint := '更新一部分,更新表s_GDCCALL '||',GDDM='||V_GDDM||',ZQDM='||V_ZQDM||',RQ='||V_RQ||'时';
update s_gdccall set bcjslall = V_bcjsl+l_bcjslall,bcjjeall = v_bcjje+l_bcjjeall,scjslall = v_scjsl + l_scjslall,scjjeall = v_scjje+l_scjjeall where
zqdm = v_zqdm and gddm = v_gddm;
end if;
end if;
close c_S_GDCCALL; */
-- commit;
Exception
When OTHERS THEN
-- RollBack to A;
insert into suky.s_err_info (ErrStr,zqdm) values (StepPoint||' RQ='||To_Char(V_RQ,'yyyy-mm-dd'),V_zqdm);
commit;
END;
当插入到230条记录的时候出现:超出打开最大游标数的error,可是我每次都已经关闭Cursor了,
请问是怎么回事?