ORA-12814: only one CACHE or NOCACHE clause may be specified
Cause: CACHE was specified more than once, NOCACHE was specified more than once, or both CACHE and NOCACHE were specified in a CREATE TABLE or CLUSTER, or in an ALTER TABLE or CLUSTER statement.
Action: Remove all but one of the CACHE or NOCACHE clauses and reissue the statement.
ORA-12814错误表明,在执行SQL语句时,指定了多于一个CACHE或NOCACHE子句,而不允许使用多个。
Oracle文档表明,仅允许对链接子查询使用一个CACHE或NOCACHE子句。 尝试将多个CACHE或NOCACHE子句用于单个查询将会生成ORA-12814错误。
例如,以下查询将引发此错误:
SELECT *
FROM (
SELECT *
FROM emp
CACHE
NOCACHE
)
我们经常会在嵌套查询中遇到ORA-12814错误,因为倾向于试图将多个缓存或无缓存子句放入多层嵌套查询中。
正常处理方法及步骤
为了解决ORA-12814错误,您应该改变缓存或不缓存子句的位置。具体来说,在每个嵌套查询中最多只允许一个缓存或不缓存子句。
因此,您可以将上面的查询更改如下所示:
SELECT *
FROM (
SELECT *
FROM emp
CACHE
)
或
SELECT *
FROM (
SELECT *
FROM emp
NOCACHE
)