是否可以更改结果列?

时间:2013-06-13 18:03:52

标签: sql oracle

我有一个表 MyTable ,有6列:
当我写:select * from MyTable我得到这个结果

  

NAME | LAST_NAME | FIRST_NAME |年龄| SALARY | ID


我想要的是改变他们的顺序,我希望ID在第一个不在lat

示例:当我编写查询select * from MyTable时,我希望结果如下:

  

ID | NAME | LAST_NAME | FIRST_NAME |年龄| SALARY

我为什么要这样?:这个表有一个程序,它接受我插入的内容,并使用解析器为我们创建另一个查询。
例如:如果我插入id = 1并且name = stack和last_name = over解析器将以这种方式进行:插入mytable值(1,'stack','over')(这是一个简单的例子,我的解析器很复杂)
所以你首先会问自己为什么需要这个? 因为我有20多个开发人员认为ID是第一个。
这一切都是在我尝试修改列ID时开始的,所以我不得不放弃它并再次重新创建列并添加约束并将NULL更改为NOT NULL,然后删除它我将数据放入临时列中,这样我没有丢失数据。但有一点我没看到的是列订单 好吧,我可以简单地告诉开发人员这个变化,但如果我这样做,我会被问到很多问题,我是怎么做到的,为什么。我不希望任何人知道(如果可能的话)

我脑海中的一个解决方案是使用正确的行创建一个新表。但是程序,触发器将被删除,我必须再次为该表添加它们,我担心重新创建表会遇到新的问题。

1 个答案:

答案 0 :(得分:2)

请勿使用*,请按所需顺序指定列,例如:

select ID, NAME, LAST_NAME, FIRST_NAME, AGE, SALARY  from MyTable

如果必须重新排序列,请创建一个视图:

create view MyView as
  select ID, NAME, LAST_NAME, FIRST_NAME, AGE, SALARY  from MyTable

以便select * from MyView返回您想要的内容。

*只是一个方便的捷径。由于它不明确,因此在表中添加或删除列时可能会导致错误。在生产代码中使用它并不好。

不要创建另一个表,这太复杂了。