各位高手麻烦请大家帮忙看看,小第初学ORACLE,遇到这样的问题。
小弟的ORACLE安装在UNIX下,其中有个存储过程,每天运行,负责取出当天最大的前20个号码,然后插入到数据库的表中,这个表是每个月月初自动建立的。
可现在在每个月月初,表建立之后,却不会向里面插入数据,报这2个错。
DBD::Oracle::st execute failed: ORA-04021: timeout occurred while waiting to lock object IIN.TOP_PROC (DBD ERROR: OCIStmtExecute)和
DBD::Oracle::st execute failed: ORA-01410: invalid ROWID
ORA-06512: at "IIN.TOP_PROC", line 118DBD::Oracle::st execute failed: ORA-01410: invalid ROWID
ORA-06512: at "IIN.TOP_PROC", line 59我实在不知道怎么理解,我查了看这个月新建的invalid rowid是空的,什么也没有啊。我附上我的存储过程TOP_PROC 麻烦各位帮忙看看,实在感谢了/
CREATE OR REPLACE PROCEDURE Top_proc AS
V_CallNo Varchar2(20);
V_StatTime Varchar2(20);
N_CallIn Number(1) := 1;
N_CallOut Number(1) := 0;
N_TotalCall Number(1) := 0;
N_AnswerCall Number(1) := 1;
N_AnswerTime Number(1) := 2;
N_StatValue Number(30, 2);
V_Time Varchar2(20);
N_RecordNum Number := 1;
N_MaxNum Number := 100;
CURSOR C_TotalCalling IS
select TIMESTAMP, CallingNo, count(CallingNo) StatValue, TIME from Table_CDR
where not(CallingNo is null)
group by TIMESTAMP, CallingNo,TIME
order by count(CallingNo) desc;
CURSOR C_AnswerCalling IS
select TIMESTAMP,CallingNo, count(CallingNo) StatValue,TIME from Table_CDR
where not(CallingNo is null) and ConversationTime > 0
group by TIMESTAMP,CallingNo,TIME
order by count(CallingNo) desc;
CURSOR C_AnswerTimeCalling IS
select TIMESTAMP,CallingNo, sum(ConversationTime) StatValue,TIME from Table_CDR
where not(CallingNo is null)
group by TIMESTAMP,CallingNo,TIME
order by sum(ConversationTime) desc; CURSOR C_TotalCalled IS
select TIMESTAMP,CalledNo, count(CalledNo) StatValue,TIME from Table_CDR
where not(CalledNo is null)
group by TIMESTAMP,CalledNo,TIME
order by count(CalledNo) desc;
CURSOR C_AnswerCalled IS
select TIMESTAMP,CalledNo, count(CalledNo) StatValue,TIME from Table_CDR
where not(CalledNo is null) and ConversationTime > 0
group by TIMESTAMP,CalledNo,TIME
order by count(CalledNo) desc; CURSOR C_AnswerTimeCalled IS
select TIMESTAMP,CalledNo, sum(ConversationTime) StatValue,TIME from Table_CDR
where not(CalledNo is null)
group by TIMESTAMP,CalledNo,TIME
order by sum(ConversationTime) desc;
BEGIN
N_RecordNum := 1;
OPEN C_TotalCalling;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_TotalCalling INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallOut,N_TotalCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_TotalCalling%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_TotalCalling;
N_RecordNum := 1; OPEN C_AnswerCalling;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerCalling INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallOut,N_AnswerCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerCalling%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerCalling; N_RecordNum := 1; OPEN C_AnswerTimeCalling;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerTimeCalling INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211( STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallOut,N_AnswerTime,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerTimeCalling%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerTimeCalling;
N_RecordNum := 1;
OPEN C_TotalCalled;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_TotalCalled INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallIn,N_TotalCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_TotalCalled%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_TotalCalled; N_RecordNum := 1; OPEN C_AnswerCalled;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerCalled INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallIn,N_AnswerCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerCalled%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerCalled; N_RecordNum := 1; OPEN C_AnswerTimeCalled;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerTimeCalled INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211( STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallIn,N_AnswerTime,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerTimeCalled%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerTimeCalled;
END Top_proc;
小弟的ORACLE安装在UNIX下,其中有个存储过程,每天运行,负责取出当天最大的前20个号码,然后插入到数据库的表中,这个表是每个月月初自动建立的。
可现在在每个月月初,表建立之后,却不会向里面插入数据,报这2个错。
DBD::Oracle::st execute failed: ORA-04021: timeout occurred while waiting to lock object IIN.TOP_PROC (DBD ERROR: OCIStmtExecute)和
DBD::Oracle::st execute failed: ORA-01410: invalid ROWID
ORA-06512: at "IIN.TOP_PROC", line 118DBD::Oracle::st execute failed: ORA-01410: invalid ROWID
ORA-06512: at "IIN.TOP_PROC", line 59我实在不知道怎么理解,我查了看这个月新建的invalid rowid是空的,什么也没有啊。我附上我的存储过程TOP_PROC 麻烦各位帮忙看看,实在感谢了/
CREATE OR REPLACE PROCEDURE Top_proc AS
V_CallNo Varchar2(20);
V_StatTime Varchar2(20);
N_CallIn Number(1) := 1;
N_CallOut Number(1) := 0;
N_TotalCall Number(1) := 0;
N_AnswerCall Number(1) := 1;
N_AnswerTime Number(1) := 2;
N_StatValue Number(30, 2);
V_Time Varchar2(20);
N_RecordNum Number := 1;
N_MaxNum Number := 100;
CURSOR C_TotalCalling IS
select TIMESTAMP, CallingNo, count(CallingNo) StatValue, TIME from Table_CDR
where not(CallingNo is null)
group by TIMESTAMP, CallingNo,TIME
order by count(CallingNo) desc;
CURSOR C_AnswerCalling IS
select TIMESTAMP,CallingNo, count(CallingNo) StatValue,TIME from Table_CDR
where not(CallingNo is null) and ConversationTime > 0
group by TIMESTAMP,CallingNo,TIME
order by count(CallingNo) desc;
CURSOR C_AnswerTimeCalling IS
select TIMESTAMP,CallingNo, sum(ConversationTime) StatValue,TIME from Table_CDR
where not(CallingNo is null)
group by TIMESTAMP,CallingNo,TIME
order by sum(ConversationTime) desc; CURSOR C_TotalCalled IS
select TIMESTAMP,CalledNo, count(CalledNo) StatValue,TIME from Table_CDR
where not(CalledNo is null)
group by TIMESTAMP,CalledNo,TIME
order by count(CalledNo) desc;
CURSOR C_AnswerCalled IS
select TIMESTAMP,CalledNo, count(CalledNo) StatValue,TIME from Table_CDR
where not(CalledNo is null) and ConversationTime > 0
group by TIMESTAMP,CalledNo,TIME
order by count(CalledNo) desc; CURSOR C_AnswerTimeCalled IS
select TIMESTAMP,CalledNo, sum(ConversationTime) StatValue,TIME from Table_CDR
where not(CalledNo is null)
group by TIMESTAMP,CalledNo,TIME
order by sum(ConversationTime) desc;
BEGIN
N_RecordNum := 1;
OPEN C_TotalCalling;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_TotalCalling INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallOut,N_TotalCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_TotalCalling%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_TotalCalling;
N_RecordNum := 1; OPEN C_AnswerCalling;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerCalling INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallOut,N_AnswerCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerCalling%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerCalling; N_RecordNum := 1; OPEN C_AnswerTimeCalling;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerTimeCalling INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211( STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallOut,N_AnswerTime,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerTimeCalling%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerTimeCalling;
N_RecordNum := 1;
OPEN C_TotalCalled;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_TotalCalled INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallIn,N_TotalCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_TotalCalled%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_TotalCalled; N_RecordNum := 1; OPEN C_AnswerCalled;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerCalled INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211(STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallIn,N_AnswerCall,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerCalled%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerCalled; N_RecordNum := 1; OPEN C_AnswerTimeCalled;
LOOP
IF N_RecordNum > N_MaxNum THEN
EXIT;
END IF;
FETCH C_AnswerTimeCalled INTO V_StatTime, V_CallNo, N_StatValue, V_TIME;
INSERT INTO TOP_200211( STATTIME,CALLNO,IO,STATTYPE,STATVALUE,TIME)
VALUES(to_date(V_StatTime,'YYYY-MM-DD HH24:MI:SS'),
V_CallNo,N_CallIn,N_AnswerTime,N_StatValue,
to_date(V_TIME,'YYYY-MM-DD HH24:MI:SS'));
N_RecordNum := N_RecordNum + 1;
EXIT WHEN C_AnswerTimeCalled%NOTFOUND ;
END LOOP;
Commit;
CLOSE C_AnswerTimeCalled;
END Top_proc;
解决方案 »
- SQL中 WHERE 后 LIKE %(select语句)%
- 如何 提高oralce 数据库的查询效率?
- Oracle导入数据库出错,请进!!
- 求助ORACLE 高手
- 需要大家的帮忙,关于sqlldr导入不规则文件的问题。。。
- 急救!!存储过程的一个问题。
- 如何在Oracle Storage Procedure中调用C语言的API
- 提交到oracal数据库不正确(但是向access,sql server中提交完全正确)?
- 语句级,行级触发器区别
- 物料批次控制后,采购接收事务处理没有产生批次问题
- iSQL*Plus URL 为:http://xxx:5560/isqlplusiSQL*Plus
- 急啊在线等:比较oracle date类型数据
select b.SID,b.SERIAL#,c.SQL_TEXT
from v$locked_object a, v$session b, v$sqlarea c
where a.SESSION_ID = b.SID
and b.SQL_ADDRESS = c.ADDRESS
and c.sql_text like '%table_name%'
包为:
select B.SID,b.USERNAME,b.MACHINE FROM V$ACCESS A, V$SESSION B WHERE A.SID=B.SID and a.OBJECT = '%PACKAGE_name%' and a.TYPE = 'PACKAGE'
找出这个session
然后 kill
alter system kill session 'sid,serial#'