我正在使用Oracle数据库,我需要实现一个查询,它检索表记录的所有值(对于特定的WHERE条件),除了已知的那个。
想象一下,有下表: Sample table
您不想检索"年龄"列,但在 - 软件的下一个版本中 - 表可以有更多的列相对于实际存在的列。
Oracle中是否有任何排除特定列的命令(总是已知,如示例" Age")并允许我检索所有其他值?
提前致谢!
答案 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
将生成
select FirstName, LastName, Address, City, Age from SAMPLE_TABLE
将产生:
答案 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;