admin管理员组

文章数量:1596328

执行代码:with as 写法

错误如下:ORA-01762 – vopdrv: view query block not in FROM

报错原因:由于with 中定义的查询,在后面没有用到,所以报错了,因为在写语句时,是一段一段写的,每写一段,就运行一段,一开始并没有报错(只运行了最后一段),但是越写越多时就报错了,在oracle 11g r2的环境,感觉是个bug。

解决方法:在最后的语句中用到了所有在with中定义的语句,就不报错了。
 

参考网友的

1. alter session set "_eliminate_common_subexpr"=false,设置 true 或者false不起效

2.采用传统的plus notation  (+) 来代替JOIN 的写法,也不起效

 

拓展下:

CTE(Common Table Expression) 公用表表达式,它是在单个语句的执行范围内定义的临时结果集,只在查询期间有效。它可以自引用,也可在同一查询中多次引用,实现了代码段的重复利用。

CTE最大的好处是提升T-Sql代码的可读性,可以更加优雅简洁的方式实现递归等复杂的查询。

CTE可用于:
  ⒈ 创建递归查询,这个应该是CTE最好用的地方
  ⒉ 在同一语句中多次引用生成的表
  3. 减少子查询和表变量,提高执行效率

CTE优点:
  1. 使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。同时ÿ

本文标签: 视图ORAvopdrv