<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天在寫一個簡單的SQL語句並執行時丟擲瞭如下圖所示的一個錯誤提示資訊!
恩,此異常資訊很明顯,在SQL語句中標示符的長度過長了,簡短一些就應該沒問題了,我檢視了一下我的SQL語句發現是我的查詢欄位的列別名過長,實際測試的結果為列欄位別名的最大長度為30個位元組!
注意:我的測試資料庫是ORACLE 11.2.0.4.0(如下圖所示)
ok,問題搞定了,對應的更多的錯誤資訊及解決方案,也可以從ORACLE的錯誤資訊手冊中查詢比如(針對此問題):
Error:
ORA-00972: identifier is too long
Cause:
You tried to reference a table, cluster, view, index, synonym, tablespace, or username with a value that was longer than 30 characters.
Action:
The options to resolve this Oracle error are:
Names for tables, clusters, views, indexes, synonyms, tablespaces, and usernames must be 30 characters or less. You must shorten the name to no more than 30 characters for these objects.
以上內容是我分析和解決我的SQL語句中,查詢時列的別名過長問題的過程,也是我分享這篇小博文的引子!
下面是我針對別名的一個小結(注意:我的測試資料庫是ORACLE 11.2.0.4.0 字元集是AMERICAN_AMERICA.AL32UTF8)
1)簡化SQL語句的書寫,特別是多表關聯查詢且表名較長時
2)增強SQL語句的可讀性,特別是當查詢出來的列欄位較為複雜時效果更為明顯
1)測試時使用的簡單表結構
CREATE TABLE SALES.STUDENT ( ID NUMBER, NAME VARCHAR2(20 BYTE), SEX CHAR(1 BYTE), BIRTHDAY DATE, HOBBY VARCHAR2(20 CHAR) )
2)測試使用的若干條測試資料
3)列名的最大長度——30個位元組
SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE--30個英文大寫字元,正常執行 FROM STUDENT SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE1--多加另一個1就會報ORA-00972:identifier is to long FROM STUDENT SELECT ID 我們學校的好學生學號--10箇中文漢字字元,正常執行 FROM STUDENT SELECT ID 我們學校的好學生學號1--多加另一個1就會報ORA-00972:identifier is to long FROM STUDENT
4)是否可以使用AS關鍵字——可以使用
SELECT ID AS 學號--使用AS的情況,正常執行 FROM STUDENT SELECT ID 學號--不適用AS也可以正常執行,而且程式碼更簡潔,建議使用方式 FROM STUDENT
5)是否可以以數位開頭——可以以數位開頭但必須使用雙引號括起來
SELECT ID 123學號--執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT SELECT ID "123學號"--正常執行
6)對於中文別名雙引號、單引號、不使用引號的區別(注意:全是英文的單引或雙引符號)——使用單引符號時報錯
SELECT ID 學號--正常執行 FROM STUDENT SELECT ID "學號"--正常執行 FROM STUDENT SELECT ID '學號'--執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT SELECT ID StudentId--正常執行 FROM STUDENT SELECT ID "StudentId"--正常執行 FROM STUDENT SELECT ID 'StudentId'--執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT
7)是否可以使用其他的特殊符號比如:小括號——可以使用但必須使用雙引號括起來(注意:其他的特殊符號可能類似,這裡以小括號為例做了測試,其他情況如果感興趣可以自己動手試試)
SELECT ID AS (學號)--英文小括號且使用AS的情形,執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT SELECT ID (學號)--英文小括號,執行時報"ORA-00904: "ID": invalid identifier" FROM STUDENT SELECT ID AS "(學號)"--正常執行 FROM STUDENT SELECT ID AS(學號)--中文小括號且使用AS的情形,執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT SELECT ID(學號)--中文小括號,執行時報"ORA-00904: "ID": invalid identifier" FROM STUDENT SELECT ID "(學號)"--正常執行 FROM STUDENT
8)是否可以保留別名中的空格——可以,但必須使用雙引號括起來
SELECT ID 學 號--執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT SELECT ID "學 號"--正常執行 FROM STUDENT SELECT ID XUE HAO--執行時報"ORA-00923: FROM keyword not found where expected" FROM STUDENT SELECT ID "XUE HAO"--正常執行 FROM STUDENT
9)使用別名時因SQL語句各子句的執行順序引起的問題
ORACLE中的SQL語句,
1.WHERE/GROUP BY/HAVING子句中只能直接使用欄位或者常數,而不能使用欄位的別名,除非這個別名來自 子查詢之中,如:SELECT .... FROM (SELECT COLUMN_NAME C FROM TABLE_NAME) WHERE C > 1
2.而ORDER BY 則可以直接使用別名,如SELECT COLUMN_NAME C FROM TABLE_NAME ORDER BY C
這和SQL的執行順序是有關的,SQL語句的執行順序大致如下所示:
1. FROM語句
2. WHERE語句(結合條件)
3. START WITH語句
4. CONNECT BY語句
5. WHERE語句
6. GROUP BY語句
7. HAVING語句
8. MODEL語句
9. SELECT語句
10. UNION、MINUS、INTERSECT等集合演算演算
11. ORDER BY語句
我們可以看到SELECT子句是在WHERE子句執行後才執行的,當SELECT子句執行時查詢列的別名才生成,所以在 WHERE子句中根本看不到列的別名,當然,自然也就無法參照列的別名了。 所以欄位、表示式的別名在WHERE子 句和GROUP BY子句都是不能使用的,而在ORDER BY中不僅可以使用別名,甚至可以直接使用欄位的下標來進行 排序,如:ORDER BY ID或者ORDER BY 1
SELECT ID ID_ FROM STUDENT WHERE ID_=11--執行時報"ORA-00904: "ID_": invalid identifier" SELECT ID ID_ FROM STUDENT WHERE ID=11--正常執行 SELECT ID ID_ FROM STUDENT WHERE ID='11'--正常執行,注意:ID是NUMBER型別的資料 SELECT ID ID_ FROM STUDENT WHERE ID="11"--執行時報"ORA-00904: "11": invalid identifier",注意:ID是NUMBER型別的資料 SELECT ID,COUNT(*) C FROM STUDENT GROUP BY ID HAVING C>0--執行時報"ORA-00904: "C": invalid identifier" SELECT ID,COUNT(*) C FROM STUDENT GROUP BY ID HAVING Count(*)>0--正常執行 SELECT ID,COUNT(*)C FROM STUDENT GROUP BY ID HAVING COUNT(*)>0 ORDER BY C--正常執行 SELECT ID ID_ FROM STUDENT ORDER BY ID_--正常執行 SELECT ID ID_ FROM STUDENT ORDER BY 1--正常執行
10)別名是否區分大小寫——區分大小寫(注意:當不用雙引號括起來的時候英文字元大小寫不敏感)
SELECT XUEHAO FROM (SELECT ID XUEHAO FROM STUDENT) WHERE XUEHAO > 1--正常執行 SELECT XUEHAO FROM (SELECT ID xuehao FROM STUDENT) WHERE XUEHAO > 1--正常執行 SELECT XUEHAO FROM (SELECT ID "XUEHAO" FROM STUDENT) WHERE XUEHAO > 1--正常執行 SELECT XUEHAO FROM (SELECT ID "xuehao" FROM STUDENT) WHERE XUEHAO > 1--執行時報"ORA-00904: "XUEHAO": invalid identifier" SELECT XUEHAO FROM (SELECT ID "xuehao" FROM STUDENT) WHERE xuehao > 1--執行時報"ORA-00904: "XUEHAO": invalid identifier" SELECT XUEHAO FROM (SELECT ID "xuehao" FROM STUDENT) WHERE "xuehao" > 1--執行時報"ORA-00904: "XUEHAO": invalid identifier" SELECT "xuehao" FROM (SELECT ID "xuehao" FROM STUDENT) WHERE "xuehao" > 1--正常執行
這個小例子也可以看到SQL語句是先執行WHERE子句然後才執行SELECT子句的!
到此這篇關於Oracle別名使用要點小結的文章就介紹到這了,更多相關Oracle別名使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45