ORA-21700: 对象不存在或被标记为删除
Posted
技术标签:
【中文标题】ORA-21700: 对象不存在或被标记为删除【英文标题】:ORA-21700: object does not exist or is marked for delete 【发布时间】:2015-07-23 14:18:43 【问题描述】:我有包含 Period 和 TableOfPeriod 类型的包:
TYPE Period
IS RECORD
( StartPeriod Date,
EndPeriod Date
);
TYPE TableOfPeriod
IS TABLE OF Period;
在这个包中我有三个简单的功能:
FUNCTION Temp1
RETURN TableOfPeriod IS
returnedValue TableOfPeriod := TableOfPeriod();
BEGIN
returnedValue.extend(1);
returnedValue(1).StartPeriod := sysdate-100;
returnedValue(1).EndPeriod := sysdate;
RETURN returnedValue;
END Temp1;
FUNCTION CalculateFine
return VARCHAR2
IS
freewillLockTableRP TableOfPeriod:=TableOfPeriod();
compulsoryLockTableRP TableOfPeriod:=TableOfPeriod();
BEGIN
--for testing
compulsoryLockTableRP:=Temp1();
FOR i IN compulsoryLockTableRP.FIRST..compulsoryLockTableRP.LAST LOOP
IF(((compulsoryLockTableRP(i).EndPeriod - compulsoryLockTableRP(i).StartPeriod)>1)) THEN
BEGIN
-- RAISE_APPLICATION_ERROR(-20001, 'Hello world');
SELECT T111.StartPeriod StartPeriod,
T111.EndPeriod EndPeriod
bulk collect into freewillLockTableFull
FROM TABLE(DistributeDaysByPeriods(compulsoryLockTableRP, 5)) T111;
END;
END IF;
END LOOP;
/*SELECT T111.StartPeriod StartPeriod,
T111.EndPeriod EndPeriod
-- BULK COLLECT INTO compulsoryLockTableRP
bulk collect into freewillLockTableFull
FROM TABLE(DistributeDaysByPeriods(compulsoryLockTableRP, 5)) T111;*/
--===========
--SOME OTHER PROCESSING
RETURN 'Ok '
|| '#r';
EXCEPTION
WHEN No_Data_Found THEN return 'No data found#g';
-- WHEN OTHERS THEN RETURN SQLERRM;
END CalculateFine;
当我执行这个函数时,我有下一个错误:
" ORA-06512: 在“MyPackageName”,第 1181 行 ORA-06512:在第 1 行 21700. 00000 - “对象不存在或被标记为删除””
其中1181行是带有CalculateFine函数的Select语句的行。谁能告诉我,出了什么问题以及我该如何解决这个问题?
【问题讨论】:
Querying a Nested Table 的可能重复项 【参考方案1】:检查你的包所在的同一个文件夹中是否有一个同名但扩展名为 *.~sql 的文件(例如:your_file_name.~sql)。我遇到了同样的错误,但在删除 *.~sql 文件后,我可以编译我的包而不会出现 ORA 错误。
【讨论】:
关于运行时错误而不是编译的问题以上是关于ORA-21700: 对象不存在或被标记为删除的主要内容,如果未能解决你的问题,请参考以下文章
在oracle11g中删除sde用户报ora - 21700错误的解决方法
写入Excel文件时文件名或路径不存在或被其他程序使用[重复]