这是我面临的一个非常奇怪的问题。我有一个模板表(DATA_template_table),它存储从XML上传的数据。DATA_TEMPLATE_Table表大约有52列。当我执行下面的查询时,它返回前6列:
select TABLE_NAME,column_name from all_tab_columns
where 1=1
and
table_name='DATA_TEMPLATE_TABLE'
AND column_name <>'ID'
AND column_name <>'QUERY_REF'
and rownum <=6
order by column_id;
但当我再次执行它时,它会给我最后6列。上述表格的结构如下:
CREATE TABLE DATA_TEMPLATE_TABLE
(
ID NUMBER NOT NULL,
COL_V1 VARCHAR2(4000 BYTE),
COL_V2 VARCHAR2(4000 BYTE),
COL_V3 VARCHAR2(4000 BYTE),
COL_V4 VARCHAR2(4000 BYTE),
COL_V5 VARCHAR2(4000 BYTE),
COL_V6 VARCHAR2(4000 BYTE),
COL_V7 VARCHAR2(4000 BYTE),
COL_V8 VARCHAR2(4000 BYTE),
COL_V9 VARCHAR2(4000 BYTE),
COL_V10 VARCHAR2(4000 BYTE),
COL_V11 VARCHAR2(4000 BYTE),
COL_V12 VARCHAR2(4000 BYTE),
COL_V13 VARCHAR2(4000 BYTE),
COL_V14 VARCHAR2(4000 BYTE),
COL_V15 VARCHAR2(4000 BYTE),
COL_V16 VARCHAR2(4000 BYTE),
COL_V17 VARCHAR2(4000 BYTE),
COL_V18 VARCHAR2(4000 BYTE),
COL_V19 VARCHAR2(4000 BYTE),
COL_V20 VARCHAR2(4000 BYTE),
COL_V21 VARCHAR2(4000 BYTE),
COL_V22 VARCHAR2(4000 BYTE),
COL_V23 VARCHAR2(4000 BYTE),
COL_V24 VARCHAR2(4000 BYTE),
COL_V25 VARCHAR2(4000 BYTE),
COL_V26 VARCHAR2(4000 BYTE),
COL_V27 VARCHAR2(4000 BYTE),
COL_V28 VARCHAR2(4000 BYTE),
COL_V29 VARCHAR2(4000 BYTE),
COL_V30 VARCHAR2(4000 BYTE),
COL_V31 VARCHAR2(4000 BYTE),
COL_V32 VARCHAR2(4000 BYTE),
COL_V33 VARCHAR2(4000 BYTE),
COL_V34 VARCHAR2(4000 BYTE),
COL_V35 VARCHAR2(4000 BYTE),
COL_V36 VARCHAR2(4000 BYTE),
COL_V37 VARCHAR2(4000 BYTE),
COL_V38 VARCHAR2(4000 BYTE),
COL_V39 VARCHAR2(4000 BYTE),
COL_V40 VARCHAR2(4000 BYTE),
COL_V41 VARCHAR2(4000 BYTE),
COL_V42 VARCHAR2(4000 BYTE),
COL_V43 VARCHAR2(4000 BYTE),
COL_V44 VARCHAR2(4000 BYTE),
COL_V45 VARCHAR2(4000 BYTE),
COL_V46 VARCHAR2(4000 BYTE),
COL_V47 VARCHAR2(4000 BYTE),
COL_V48 VARCHAR2(4000 BYTE),
COL_V49 VARCHAR2(4000 BYTE),
COL_V50 VARCHAR2(4000 BYTE),
QUERY_REF VARCHAR2(4000 BYTE)
);
这里有什么问题,请帮忙,因为我无法解决这个问题。
如果您想要执行查询的所有列都相同,则需要按升序或降序排列
select * from
(select TABLE_NAME,column_name from all_tab_columns
where 1=1
and
table_name='DATA_TEMPLATE_TABLE'
AND column_name <>'ID'
AND column_name <>'QUERY_REF'
order by column_id)
where rownum<=6;
来自Oracle杂志的一篇文章。。
ROWNUM是查询中可用的伪列(而不是实列)。ROWNUM将被分配数字1、2、3、4。。。N,其中N是ROWNUM使用的集合中的行数。ROWNUM值不会永久分配给一行(这是一个常见的误解)。表中的一行没有数字;你不能从桌子上要第5行——根本没有这样的东西。
同样让许多人感到困惑的是,ROWNUM值的实际分配时间。ROWNUM值在行通过查询的谓词阶段之后,但在查询执行任何排序或聚合之前分配给行。此外,ROWNUM值只有在分配后才会递增,这就是为什么下面的查询