oracle 字段别名
原创
©著作权归作者所有:来自51CTO博客作者人称左直拳的原创作品,请联系作者获取转载授权,否则将追究法律责任
像 type,level这些字眼都是oracle的保留字,在数据表设计的时候,应该避免将字段采用这样的保留字来命名,否则可能会产生一些异常,带来不便。
如果非要用来命名,该咋办呢?,可以用双引号将它引起来,比如
create or replace view work.v_alert as
select 0 as "type",--<--看这里----------
to_char(id) as sid,
to_date(time,'yyyy-MM-dd hh24:mi:ss') as time,
region,
(case when hotspot>=1 and dhw>=8 then 5
when hotspot>=1 and dhw<8 and dhw>=4 then 4
when hotspot>=1 and dhw<4 and dhw>0 then 3
when hotspot<1 and hotspot>0 then 2
else 1 end) as "level" --<--看这里----------
from
这样子命名,视图创建了是创建了,但使用过程中就有问题,比如这样用
select count(*),level from work.v_alert v group by level
就会报错,报ORA-01788。原因是level是保留字,oracle会特别处理。
我又发现,假如别名用双引号引起来,使用也有问题。比如我将上述视图创建语句这样写:
create or replace view work.v_alert as
select 0 as "alert_type",--<--看这里----------
to_char(id) as sid,
to_date(time,'yyyy-MM-dd hh24:mi:ss') as time,
region,
(case when hotspot>=1 and dhw>=8 then 5
when hotspot>=1 and dhw<8 and dhw>=4 then 4
when hotspot>=1 and dhw<4 and dhw>0 then 3
when hotspot<1 and hotspot>0 then 2
else 1 end) as "alert_level" --<--看这里----------
from
但还是报错,说是无法辨认alert_level。
select count(*),level from work.v_alert v group by
应该改为
select count(*),"alert_level" from work.v_alert v group by "alert_level"
其实alert_level已经不是保留字,创建视图时就没必要再加双引号了,去掉即可。
另外,在sql server里面,用别名比较简单,如
select alert_type=0 from table1;
就得到一个名为alert_type的字段,其值为0。但oracle对这类赋值别名,需要这样写:
select 0 as alert_type from table1;