ORA-00166: remote/local nesting level is too deep

文档解释

ORA-00166: remote/local nesting level is too deep

Cause: Too many remote table operations required a reverse trip back to the local site, for example to execute a local function on a remote table.

Action: Rearrange the query or co-locate the functions with the tables.

ORA-00166则是一个层次层次深入太多(remote/local nesting level is too deep)的错误。

官方解释

ORA-00166 表明远程/本地层次嵌套层次过深,尝试解决这个问题的步骤是自下而上排查,这种问题可能会出现在许多不同的SQL语句上,例如 SELECT、INSERT、CREATE TABLE或者DELETE等等。

常见案例

当一个类似下面这样复杂,且层次嵌套深度超过允许的层数时(默认50个层)就会发生ORA-00166:

SELECT …

FROM (

SELECT …

FROM (

SELECT …

FROM Foo

WHERE …

)

UNION ALL

SELECT …

FROM Bar

WHERE …

)

WHERE …

正常处理方法及步骤

1. 确定导致ORA-00166错误的原因。

2. 对嵌套的那部分SQL语句中的深层select进行优化。

3. 把层次(Level)数限制减少到50以内。

4. 尝试重写SQL,如使用with等结构。

5. 检查是否存在过多的层次嵌套,如存在则尝试使用子查询来替代,并且要考虑可能存在着性能问题。

6. 在Oracle文档中查找相关细节以求解决方案。

7. 使用Hints来改变执行计划(Execution Plan)。

8. 仔细检查包含INNER JOIN的SQL语句是否滥用嵌套。

9. 改用索引捕获解决方案。

你可能感兴趣的