2014-10-29 135 views
1

我試圖使用列名稱,像減號,點和其他幾個符號。 Oracle SQL解析器不包括它們。就像這樣:如何在SQL列名中使用符號?

select 
    a.ID as Article-Number, a.Name as Name 
from 
    Articles a 
where 
    (a.ID = '3264') 

而且它不除外a.ID as 'Article-Number'(說"FROM keyword not found where expected")。我可以在列名中使用符號嗎?

回答

4

您可以使用雙引號(")逃脫別名和列名:

select 
    a.ID as "Article-Number", a.Name as "Name" 
from 
    Articles a 
where 
    (a.ID = '3264') 
+0

Hmpf,我的壞。我沒有嘗試雙引號。我認爲''''和'''在Oracle中是一樣的,我只是更喜歡'',因爲我不必在C#中轉義它們。 – Bitterblue 2014-10-29 06:54:32

+0

'name'別名很好,它不需要'double-引用'標記 – 2014-10-29 07:03:34

+0

@LalitKumarB我去了一致性(當然,雖然你是正確的)。 – Mureinik 2014-10-29 07:04:19

2

的問題是隻與Article-Number別名。別名name非常好。

SQL> select e.ename as name from emp e where rownum = 1; 

NAME 
---------- 
SMITH 

SQL> select e.ename as Article-Number from emp e where rownum = 1; 
select e.ename as Article-Number from emp e where rownum = 1 
         * 
ERROR at line 1: 
ORA-00923: FROM keyword not found where expected 


SQL> select e.ename as "Article-Number" from emp e where rownum = 1; 

Article-Nu 
---------- 
SMITH 

SQL> 

因此,需要double-quotation馬克只爲Article-Number作爲別名逃脫-

2

我可以在列名中包含符號嗎?

我在這裏自動化的東西,所以我所有的別名都會得到雙引號。重要的是我知道如何在我的別名中使用任何字符串。

在Oracle中,您使用雙引號(")來轉義模式名稱(包括列名稱)。

不過,如果你想使自動化的東西,有一些規則,你應該知道的:

  • 名稱必須是從1到30個字符。標識符超過此限制將提高
    ORA-00972: identifier is too long
  • 名稱不能包含引號("),也不是\0(又名NUL)字符

Oracle's Schema Object Naming Rules的細節。

相關問題