Oracle用户名有引号,关于oracle sql 中as与双引号的一点有趣故事

环境plsql 9.0 ,oracle 10g。

先上今天遇到的代码:

select pwdGroup.* ,pwdGroup.pc

from

(select pwd.date_time,sum(pwd.product_count) as "pc"  from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup

order by pwdGroup.date_time asc

已经将sql处理了下,主题无关的部分全部删去了。

这条sql意思就是从PWD_PRODUCT 这张表中,查询出分组数据,并按分组排序显示出来。

这代码是正确的么?

nonono,这代码会报一个ORA-00904 : "PWDGROUP".“PC”:标识符无效的错误!

但是,如果仅仅查询上面代码中嵌套的select语句:

select pwd.date_time,sum(pwd.product_count) as "pc"  from PWD_PRODUCT pwd group by pwd.date_time

是完全正确毫无问题的。

现在看如何清除错误:

select ...

(select pwd.date_time,sum(pwd.product_count) as pc  from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup ....

改动不大。 pc 俩字儿的双引号去掉就行了。

另外一种情况:

select pwdGroup.* ,pwdGroup.产量

from

(select pwd.date_time,sum(pwd.product_count) as "产量"  from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup ...

这是允许的。

中文的另一种情况:

select pwdGroup.* ,pwdGroup.产量

from

(select pwd.date_time,sum(pwd.product_count) as 产量  from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup ...

这也是允许的。

另,对于sql的as,我一直不是很了解加不加有啥区别。上面4条语句来看,没发现有啥区别。

总结下,非嵌套查询的话,as后面有没有双引号都可以。 嵌套查询的话,最好不要用双引号。否则英文的会出错。

不知道是个坑还仅仅是自己的环境问题。

另外说一句,实际项目中sql语句远比上面提到的复杂,几乎已经复杂到了耍流氓的程度,需求做到位,数据库画好,能省掉一半的工作量,如果允许/可以使用数据库持久框架,那是再愉悦不过了。需求做好,远离深坑。

最后,这些测试说明的sql都是记事本写的,错误请指出来,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值