【发布时间】:2019-03-14 13:41:09
【问题描述】:
我在 oracle 中有以下程序:
CREATE OR REPLACE PROCEDURE usp_Templates_Load_TruncateRawTables
AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE TBLTEMPLATES_LOAD_OTHEROBJECTS_RAW';
EXECUTE IMMEDIATE 'TRUNCATE TABLE TBLTEMPLATES_LOAD_NOTES_RAW';
EXECUTE IMMEDIATE 'TRUNCATE TABLE TBLTMPLTS_LOAD_INCSTATEMT_RAW';
EXECUTE IMMEDIATE 'TRUNCATE TABLE TBLTMPLTS_LOAD_BALANCESHEET_RAW';
EXECUTE IMMEDIATE 'TRUNCATE TABLE TBLTEMPLATES_LOAD_OTHERBANK_RAW';
END;
这个过程没有任何输入或输出参数,我试图执行这个过程如下:
Execute usp_Templates_Load_TruncateRawTables;
我尝试的另一种方法是:
Begin
usp_Templates_Load_TruncateRawTables;
End;
但两次,我都收到错误消息:
ORA-00942: 表或视图不存在
ORA-06512:在“TC_OWNER.USP_TEMPLATES_LOAD_TRUNCATERAWTABLES”第 8 行
ORA-06512:在第 1 行
如何正确执行此过程以获得正确的输出。
【问题讨论】:
-
这个错误清楚地表明你正在尝试删除一个不存在的表;这与您调用该过程的方式无关。如果您希望您的过程在表不存在时不出错,请添加一些异常处理
-
TBLTMPLTS_LOAD_BALANCESHEET_RAW和TBLTEMPLATES_LOAD_OTHERBANK_RAW的长度为 32 个字符,TBLTEMPLATES_LOAD_OTHEROBJECTS_RAW的长度为 34 个字符。所以这些不是有效的 Oracle 对象名称。除非您使用的是带有长标识符的 12c R2,否则您应该这样说。 -
显然您以
TC_OWNER登录。那是您的过程中命名的表所在的架构吗?如果不是,您需要在TRUCATE语句中包含架构的名称。祝你好运。 -
这实际上是由于架构中的一个表无效引起的,修复它解决了问题。