Sql Oracle 12c列名称不一致
所以我对Oracle 12c有一个小问题。 每当我做这样的查询时Sql Oracle 12c列名称不一致,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,所以我对Oracle 12c有一个小问题。 每当我做这样的查询时 SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE table_name = 'EMP'; 我把列名按正确的顺序排列 empno ename ... 但当我再次运行它时,列名会颠倒 deptno comm ... ename empno 有人知道为什么会这样吗?这是12c中实现的一个新“功能”,还是只有我弄错了?最重要的是有办法解决这个问题吗? 提前感谢,如果这是一个愚蠢的问题,请道
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE table_name = 'EMP';
我把列名按正确的顺序排列
empno
ename
...
但当我再次运行它时,列名会颠倒
deptno
comm
...
ename
empno
有人知道为什么会这样吗?这是12c中实现的一个新“功能”,还是只有我弄错了?最重要的是有办法解决这个问题吗?
提前感谢,如果这是一个愚蠢的问题,请道歉。使用
order by column_id;
您将始终获得正确的列顺序什么是正确的顺序?添加ORDER BY以始终获得相同的订单。(否则您不能期望任何特定的顺序。)当然,您应该使用
orderby
来获得确定性输出。它真的每次都变吗?Oracle通常不会如此频繁地更改执行计划。exec计划的变化可能是由以下原因引起的:统计重新计算、一些动态采样或性能基线。如果执行计划真的随着每次执行而改变,那么可能您在Oracle中发现了一个bug。问题是,每当我在11g数据库上运行此查询时,结果都保持不变(我发布的第一件事是,列的顺序是第一次创建表时指定的顺序)。但是,当我在12c数据库上执行相同的查询时,第一个结果是发布的第一个结果,下面是第二个结果。我不知道为什么会这样。也许只是我。理论上这可能是由“性能基线”特性引起的。甲骨文记得执行官。查询计划以及每个计划的一些实际性能数据。优化器可能会为第一次执行生成一些“次优”计划。然后在执行之后,它会注意到该计划执行得不太好,所以它会从“性能基线存储库”恢复到以前的计划。如果确实看到exec,则很难验证。每次执行的计划。