在用hibernate的時候,無意間用了_teacher這個作為表名。然後就遇到了ora-00911這個錯誤。後來查了一下oracle錯誤文檔,如下:
ORA-00911 invalid character
| Cause |
Special characters are valid only in certain places. If special characters other than $, _, and # are used in a name and the name is not enclosed in double quotation marks ("), this message will be issued. One exception to this rule is for database names; in this case, double quotes are stripped out and ignored. |
| Action |
Remove the invalid character from the statement or enclose the object name in double quotation marks. |
引起的原因:
特殊字元在特殊的位置才會有效。如果類似$,_,#這些字元在名字中引用了,而又沒有用“ 引起來,這個異常就會被跑拋出來。對於資料庫名字來說,可以不用參照這個規則;這樣,雙引號將會被截掉和忽略。
解決辦法:
去掉這些特殊字元,或者將這些特殊字元用” 引起來。
Oracle
一、 命名規範
1. 是指資料庫、資料庫物件如TABLE、SEQUENCE、PROCEDURE、COLUMN等的命名規範;
2. 命名富有意義英文詞彙,除個別通用的(見列表),要避免使用縮寫),多個單片語成的,中間以底線分割;
3. 除資料庫名稱長度為1-8個字元,其餘為1-30個字元,Database link名稱也不要超過30個字元;
4. 命名只能使用英文字母,數字和底線;
5. 避免使用Oracle的保留字如level、關鍵字如type(見列表);
6. 名表之間相關列名盡量同名;
7. 資料庫的命名:網上資料庫命名為“OLPS”+表示網站(SITE,以下同)的2-4個字元,後台資料庫命名為“BOPS”+表示網站的2-4個字元。測試資料庫命名為“OLPS|BOPS”+“TEST”, 開發資料庫命名為“OLPS|BOPS”+“TEST”,用模式(SCHEMA/USER)的不同來區分不同的網站。
8. INDEX命名:table_name+column_name+index_type(1 byte)+idx,各部分以底線(_)分割。多單片語成的column name,取前幾個單詞首字母,加末單片語成column_name。如:sample表member_id上的index: sample_mid_idx news表title上的unique index:news_titile_uidx;
9. SEQUENCE命名:seq_+table_name;
二、 注釋說明
1. 本注釋說明主要用於PL/SQL程式及其它SQL檔案,其它可作參考;
2. SQLPLUS接受的注釋有三種:
―― 這兒是注釋
/* 這兒是注釋 */
REM 這兒是注釋
3. 開始注釋,類似JAVAK中的開始注釋,主要列出檔案名稱,編寫日期,著作權說明,程式功能以及修改記錄: