Oracle DB:选择除一个(已知)之外的所有数据库列的任何函数?

时间:2017-07-14 13:53:20

标签: sql oracle select oracledb

我正在使用Oracle数据库,我需要实现一个查询,它检索表记录的所有值(对于特定的WHERE条件),除了已知的那个。

想象一下,有下表: Sample table

您不想检索"年龄"列,但在 - 软件的下一个版本中 - 表可以有更多的列相对于实际存在的列。

Oracle中是否有任何排除特定列的命令(总是已知,如示例" Age")并允许我检索所有其他值?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下查询使该特定列不可见:

alter table TABLE_NAME modify COLUMN_NAME INVISIBLE;

这将从select *语句中排除该列,除非您在select子句中指定该特定列,如下所示:

select COLUMN_NAME from TABLE_NAME;

来自您的示例数据:

alter table SAMPLE_TABLE modify Age INVISIBLE;

select * FROM SAMPLE_TABLE将生成

enter image description here

select FirstName, LastName, Address, City, Age from SAMPLE_TABLE将产生:

enter image description here

答案 1 :(得分:0)

有几种方法

1)您可以设置列UNUSED。查询不会检索(并且不会使用它)。这将是永久性的。你不能再回到列,唯一允许的操作是DROP UNUSED COLUMNS.

   ALTER TABLE sample_table SET UNUSED(age); 

2)您可以设置列INVISIBLE,这是暂时的。除非您在SELECT查询中明确引用它,否则不会检索它。

   ALTER TABLE sample_table MODIFY age INVISIBLE; 
   // to change it back to VISIBLE
   ALTER TABLE sample_table MODIFY age VISIBLE; 

3)创建没有年龄列的VIEW,然后查询视图,而不是查询TABLE

 CREATE VIEW sample_table_view AS 
 SELECT first_name, last_name, address, city FROM sample_table;