文档解释
ORA-02077: selects of long columns must be from co-located tables
Cause: if a select returns long columns from multiple tables, all the tables must be co-located
Action: None
ORA-02077异常为:selects of long columns must be from co-located tables。
官方解释
当在分区表中查询长列(LOB或特殊的DATE/TIMESTAMP等类型的列)的数据时,必须使用和该列在同一分区的其它数据行的列构成的条件来查询它们,即共位的设计。这样,查询结果可以返回一组包含所有有LOB内容的行。
常见案例
当在Oracle表中执行查询时,通过select from tablename查询LOB列中的数据时,就会报出该异常。
正常处理方法及步骤
1、首先,检查SQL查询语句是否符合要求,当select后跟着LOB(LONG)列时,必须有条件(相关的非LOB列作为条件),当非LOB列在不同分区表中时,必须进行分区表join,以确保数据在同一分区中查询。
2、使用SELECT DISTINCT语句来定义此类select查询的唯一性,也就是说当字段名中存在重复时,使用SELECT DISTINCT语句来移除重复记录。
3、但是如果存在多个分区表,最好是使用PARTITION BY这个子句来把它们连接起来,否则就会报下面这个错误:ORA-02077: selects of long columns must be from co-located tables。
4、在进行表连接时,把表关联到一个虚拟分区中,而不是各个分区,如UNION ALL,把表串起来可以解决这个问题。