[20180928]如何能在11g下执行.txt

--//链接问的问题: http://www.itpub.net/thread-2105467-1-1.html

create table test(t_id int,t_name varchar2(50));
create table test2(t_id int,t_name varchar2(50));

insert into test values(1,'a');
insert into test values(2,'b');
insert into test values(3,'c');

insert into test2 values(1,'a');
insert into test2 values(2,'b');
insert into test2 values(3,'c');

SELECT a.t_id, a.t_name
    FROM test a
         LEFT JOIN (  SELECT t_id, t_name
                        FROM test2
                    GROUP BY t_name) b
            ON a.t_id = b.t_id AND a.t_name = b.t_name
   WHERE a.t_id = 1
GROUP BY a.t_id, a.t_name;

--//同样的sql ,在10g下就能执行,在11g下就会报错 ora-00979 不是group by 表达式。红色部分看起来确实是错的,可是10g下整句
--//执行就有结果。如何能做到这个语句再11g下也能执行呢。

--//家里没有10g,使用12c测试看看,这条语句明显错误(  SELECT t_id, t_name FROM test2 GROUP BY t_name),这里少写了 GROUP BY
--//t_id,t_name.

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

2.测试:
SCOTT@test01p> select a.t_id,a.t_name from test a LEFT JOIN
  2  (select t_id,t_name from test2 group by t_name) b
  3  on a.t_id=b.t_id and a.t_name=b.t_name where a.t_id=1
  4  group by a.t_id,a.t_name;
(select t_id,t_name from test2 group by t_name) b
        *
ERROR at line 2:
ORA-00979: not a GROUP BY expression
--//12c 一样报错.

SCOTT@test01p> show parameter feature
NAME                                 TYPE                 VALUE
------------------------------------ -------------------- ---------------
optimizer_adaptive_features          boolean              TRUE
optimizer_features_enable            string               12.1.0.1

SCOTT@test01p> alter session set optimizer_features_enable='10.2.0.1';
Session altered.

SCOTT@test01p> SELECT a.t_id, a.t_name
  2      FROM test a
  3           LEFT JOIN (  SELECT t_id, t_name
  4                          FROM test2
  5                      GROUP BY t_name) b
  6              ON a.t_id = b.t_id AND a.t_name = b.t_name
  7     WHERE a.t_id = 1
  8  GROUP BY a.t_id, a.t_name;
      T_ID T_NAME
---------- --------------------------------------------------
         1 a

--//OK通过.不过这句话明显错误.看看执行计划:

SCOTT@test01p> @ dpc '' advanced
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  0urvg3qakxxcx, child number 0
-------------------------------------
SELECT a.t_id, a.t_name     FROM test a          LEFT JOIN (  SELECT
t_id, t_name                         FROM test2
GROUP BY t_name) b             ON a.t_id = b.t_id AND a.t_name =
b.t_name    WHERE a.t_id = 1 GROUP BY a.t_id, a.t_name

Plan hash value: 1211648783

-----------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name  | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |        |       |     9 (100)|          |       |       |          |
|   1 |  HASH GROUP BY        |       |      1 |    40 |     9  (34)| 00:00:01 |  2063K|  2063K|  438K (0)|
|   2 |   VIEW                |       |      1 |    40 |     8  (25)| 00:00:01 |       |       |          |
|   3 |    HASH GROUP BY      |       |      1 |    92 |     8  (25)| 00:00:01 |  1345K|  1345K|  486K (0)|
|*  4 |     HASH JOIN OUTER   |       |      1 |    92 |     7  (15)| 00:00:01 |  1421K|  1421K|  722K (0)|
|*  5 |      TABLE ACCESS FULL| TEST  |      1 |    52 |     3   (0)| 00:00:01 |       |       |          |
|*  6 |      TABLE ACCESS FULL| TEST2 |      1 |    40 |     3   (0)| 00:00:01 |       |       |          |
-----------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

1 - SEL$439AFB4F
   2 - SEL$3DD9CB74 / $vm_view_0@SEL$439AFB4F
   3 - SEL$3DD9CB74
   5 - SEL$3DD9CB74 / A@SEL$3
   6 - SEL$3DD9CB74 / TEST2@SEL$2

Outline Data
-------------

/*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
      DB_VERSION('12.1.0.1')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$3DD9CB74")
      MERGE(@"SEL$2")
      OUTLINE_LEAF(@"SEL$439AFB4F")
      OUTLINE(@"SEL$F2B2F603")
      OUTLINE(@"SEL$2")
      OUTLINE(@"SEL$CD8351FA")
      MERGE(@"SEL$F1D6E378")
      OUTLINE(@"SEL$4")
      OUTLINE(@"SEL$F1D6E378")
      MERGE(@"SEL$1")
      OUTLINE(@"SEL$3")
      OUTLINE(@"SEL$1")
      NO_ACCESS(@"SEL$439AFB4F" "$vm_view_0"@"SEL$439AFB4F")
      USE_HASH_AGGREGATION(@"SEL$439AFB4F")
      FULL(@"SEL$3DD9CB74" "A"@"SEL$3")
      FULL(@"SEL$3DD9CB74" "TEST2"@"SEL$2")
      LEADING(@"SEL$3DD9CB74" "A"@"SEL$3" "TEST2"@"SEL$2")
      USE_HASH(@"SEL$3DD9CB74" "TEST2"@"SEL$2")
      USE_HASH_AGGREGATION(@"SEL$3DD9CB74")
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

4 - access("A"."T_NAME"="T_NAME" AND "A"."T_ID"="T_ID")
   5 - filter("A"."T_ID"=1)
   6 - filter("T_ID"=1)

--//抽取outline.

--//编辑整理如下:

begin
dbms_sqltune.import_sql_profile(
   name => 'profile_group_error',
   description => 'SQL profile created manually test',
   sql_text => q'[SELECT a.t_id, a.t_name
    FROM test a
         LEFT JOIN (  SELECT t_id, t_name
                        FROM test2
                    GROUP BY t_name) b
            ON a.t_id = b.t_id AND a.t_name = b.t_name
   WHERE a.t_id = 1
GROUP BY a.t_id, a.t_name]',
   profile => sqlprof_attr(
'IGNORE_OPTIM_EMBEDDED_HINTS',
q'[OPTIMIZER_FEATURES_ENABLE('10.2.0.1')]',
q'[DB_VERSION('12.1.0.1')]',
'ALL_ROWS',
'OUTLINE_LEAF(@"SEL$3DD9CB74")',
'MERGE(@"SEL$2")',
'OUTLINE_LEAF(@"SEL$439AFB4F")',
'OUTLINE(@"SEL$F2B2F603")',
'OUTLINE(@"SEL$2")',
'OUTLINE(@"SEL$CD8351FA")',
'MERGE(@"SEL$F1D6E378")',
'OUTLINE(@"SEL$4")',
'OUTLINE(@"SEL$F1D6E378")',
'MERGE(@"SEL$1")',
'OUTLINE(@"SEL$3")',
'OUTLINE(@"SEL$1")',
'NO_ACCESS(@"SEL$439AFB4F" "$vm_view_0"@"SEL$439AFB4F")',
'USE_HASH_AGGREGATION(@"SEL$439AFB4F")',
'FULL(@"SEL$3DD9CB74" "A"@"SEL$3")',
'FULL(@"SEL$3DD9CB74" "TEST2"@"SEL$2")',
'LEADING(@"SEL$3DD9CB74" "A"@"SEL$3" "TEST2"@"SEL$2")',
'USE_HASH(@"SEL$3DD9CB74" "TEST2"@"SEL$2")',
'USE_HASH_AGGREGATION(@"SEL$3DD9CB74")'
),
   replace => true,
   force_match => TRUE
);
end;
/

SCOTT@test01p> show parameter feature
NAME                                 TYPE                 VALUE
------------------------------------ -------------------- --------------
optimizer_adaptive_features          boolean              TRUE
optimizer_features_enable            string               12.1.0.1

SCOTT@test01p> SELECT a.t_id, a.t_name
  2      FROM test a
  3           LEFT JOIN (  SELECT t_id, t_name
  4                          FROM test2
  5                      GROUP BY t_name) b
  6              ON a.t_id = b.t_id AND a.t_name = b.t_name
  7     WHERE a.t_id = 1
  8  GROUP BY a.t_id, a.t_name;
      T_ID T_NAME
---------- --------------------------------------------------
         1 a

--//换1个数值,SELECT变成sELECT看看.

SCOTT@test01p> sELECT a.t_id, a.t_name
  2      FROM test a
  3           LEFT JOIN (  SELECT t_id, t_name
  4                          FROM test2
  5                      GROUP BY t_name) b
  6              ON a.t_id = b.t_id AND a.t_name = b.t_name
  7     WHERE a.t_id = 2
  8  GROUP BY a.t_id, a.t_name;
      T_ID T_NAME
---------- --------------------------------------------------
         2 b

--//OK解决,最好还是叫开发改代码..

[20180928]如何能在11g下执行.txt的更多相关文章

  1. [20190416]11g下那些latch是Exclusive的.txt

    [20190416]11g下那些latch是Exclusive的.txt --//昨天测试了11g下那些latch是共享的,链接:--//是否反过来剩下的都是Exclusive的.继续测试: 1.环境 ...

  2. [20190415]11g下那些latch是共享的.txt

    [20190415]11g下那些latch是共享的.txt http://andreynikolaev.wordpress.com/2010/11/23/shared-latches-by-oracl ...

  3. dos界面下执行java文件将错误输出到一个文本小技巧

    如果dos下执行java出现错误,把错误记录到一个文档 正确时如图,输出结果为hello,我把String的s改为小写,出现错误,用2>命令输出到error.txt在当前目录就出现了error. ...

  4. Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行

    段落引用> 由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctr ...

  5. 单个源文件下CmakeList.txt

    单个源文件下CmakeList.txt 1. main.c代码 & CmakeLists.txt 文件内容 在任意自己选定的目录下(t1/)编写main.c 与 CmakeLists.txt ...

  6. linux下执行.sh文件的方法和语法

    linux下执行.sh文件的方法    .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限.       是bash脚本么   可以用touch test.sh ...

  7. [20170628]11g修改用户名.txt

    [20170628]11g修改用户名.txt --//昨天看了链接,提到修改用户名:http://www.oratea.com/2017/06/26/oracle-11g%e4%bf%ae%e6%94 ...

  8. ubuntu 下执行定时任务

    Window shell文件在linux系统下执行不了的解决办法 一些人喜欢用vim来写linux shell script, 但是, 有的人喜欢在Windows下用一些方便的编辑器(比如鼎鼎大名的N ...

  9. 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现

    最近需要做一个定时任务功能,从网站找了很多相关的代码,windows实现方法综合起来大概就两种, 一.使用PHP ignore_user_abort 函数 即使关掉浏览器也能正常运行:(个人感觉PHP ...

随机推荐

  1. Spring Cloud微服务下的权限架构调研

    随着微服务架构的流行,系统架构调整,项目权限系统模块开发提上日程,需要对权限架构进行设计以及技术选型.所以这段时间看了下相关的资料,做了几个对比选择. 一.架构图 初步设想的架构如下,结构很简单:eu ...

  2. 项目实战4—HAProxy实现高级负载均衡实战和ACL控制

     haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...

  3. SHELL脚本--数学运算和bc命令

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 使用let.(()).$(())或$[]进行基本的整数运算,使 ...

  4. GlashFish部署的程序时好时坏,无法访问时报404

    1.问题 glashfile部署的程序时好时坏, 有时部署后访问直接就报404错误 查看log, log如下[2017/09/26 18:22:54.820][               ] ERR ...

  5. 获取json串里的某个属性值

    string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\& ...

  6. [nodejs] nodejs开发个人博客(六)数据分页

    控制器路由定义 首页路由:http://localhost:8888/ 首页分页路由:http://localhost:8888/index/2 /** * 首页控制器 */ var router=e ...

  7. mongodb与spring mvc 整合

    1.pom文件添加对mongodb的倚赖 <dependency> <groupId>org.mongodb</groupId> <artifactId> ...

  8. HTML标签笔记

    换行符:<br/> 首部: <!DOCTYPE>: 说明html文档使用的标准, 在HTML5中仅为 <!DOCTYPE html>1.头标签 <head&g ...

  9. 兼容发布&小流量概述

    背景 re消息limit上线之前有这样的问题: 1.存量用户,会感知到新功能: 2.后端.前端上线间隔期间,如果没做兼容,涉及到接口数据格式变更,会导致C端拉取数据报错: 3.改模板配置,会导致老信息 ...

  10. 判断文本是否溢出/hover显示全部

    前言 在工作中我们经常会遇到,文字过多,需要用省略号,并且鼠标hover的时候 还需要 显示全部的文字的需求. 正文 文字过多需要用省略号的实现:上代码啦 .ellipsis { width: 100 ...