ORA-00000: 正常的成功的完成(操作)
ORA-00000: normal, successful completion
原因1: 正常執行完成。
Normal exit.
- 狀態: 部分驗證。
-
分析: 此異常多數為程序沒有執行SQL語句或者說成功執行完SQL語句,但人為或因邏輯有誤,非要使用相關方法程序去獲取Oracle的錯誤信息,得到此異常,實質是Oracle告知沒有異常產生,猜測是異常信息的默認值為這個。目前發現以下兩種情況:
-
存儲過程、PL/SQL塊等,使用sqlerrm獲取異常,如下例所示。【已驗證】
declare v_sqlcode number; v_sqlerrm varchar2(4000); begin /* …… 相關執行代碼 …… */ v_sqlcode := sqlcode; v_sqlerrm := sqlerrm; dbms_output.put_line('本次的異常code:' || v_sqlcode || chr(10) || '本次的異常信息:' || v_sqlerrm); exception when others then rollback; v_sqlcode := sqlcode; v_sqlerrm := sqlerrm; dbms_output.put_line('本次的異常code:' || v_sqlcode || chr(10) || '本次的異常信息:' || v_sqlerrm); end; / -
使用OCI的C程序中,用erhms()函數(OCIErrorGet())獲得Oracle錯誤信息。【未驗證,網絡匯總】
-
-
措施: 無。【如果是人為需要獲取該異常,則不用做任何操作;如果是邏輯有誤,那么需要調整不去此異常或者在遇到此異常時將其屏蔽去掉。】
None
原因2: hosts文件配置錯誤。
- 狀態: 未驗證,網絡匯總。
- 分析: 這種錯誤通常由於數據庫是復制過來的,hosts文件中的ip對應的host name和當前的主機名不一致導致甚至hosts文件丟失,都會導致數據庫startup時報此錯。
-
措施: 校驗hosts文件是否有錯或缺失,進行修改或補充。
-
hosts文件在不同系統中所處的目錄:
Windows XP/2000/Vista/7/8/8.1/10 ==> C:\windows\system32\drivers\etc\ Linux及其他類Unix操作系統 ==> /etc/
-
ORA-00001: 違反唯一約束條件 (string.string=>[擁有者].[約束名])
ORA-00001: unique constraint (string.string) violated
原因1: UPDATE或INSERT語句試圖插入重復的鍵。對於在DBMS MAC模式下配置的Trusted Oracle,如果在不同級別存在重復條目,您可能會看到此信息。
An UPDATE or INSERT statement attempted to insert a duplicate key. For Trusted Oracle configured in DBMS MAC mode, you may see this message if a duplicate entry exists at a different level.
- 狀態: 已驗證。
-
分析: 如下例所示,此異常一般為違反作用於表上的唯一約束或者主鍵約束導致,它們限制了表的一列或多列值的唯一性,不能插入重復數據。
-- 創建測試表 create table ora_00001_1( a char(24) /*primary key*/, -- 亦可加注釋內信息實現添加主鍵約束 b number /*unique*/, -- 亦可加注釋內信息實現添加唯一約束 -- 增加主鍵約束 constraint ora_00001_1_a primary key (a) -- 亦可加注釋內信息實現添加唯一約束 /*, constraint ora_00001_1_b unique (b)*/ ); -- 亦可加注釋內信息實現添加主鍵約束 /*alter table ora_00001_1 add constraint ora_00001_1_a primary key (a);*/ -- 增加唯一約束 alter table ora_00001_1 add constraint ora_00001_1_b unique (b); -- 插入測試數據 insert into ora_00001_1(a, b) values ('1',1); insert into ora_00001_1(a, b) values ('2',2); commit; -- ORA-00001: 違反唯一約束條件 (C##LY.ORA_00001_1_A); insert into ora_00001_1(a, b) values ('1',3); -- ORA-00001: 違反唯一約束條件 (C##LY.ORA_00001_1_B) insert into ora_00001_1(a, b) values ('3',2); -- ORA-00001: 違反唯一約束條件 (C##LY.ORA_00001_1_A) update ora_00001_1 set a = '1' where a = '2'; -- ORA-00001: 違反唯一約束條件 (C##LY.ORA_00001_1_B) update ora_00001_1 set b = '2' where b = '1'; -
措施: 刪除唯一約束限制或不插入重復值。
Either remove the unique restriction or do not insert the key.
-
如果分析確定此處唯一約束或主鍵約束不需要,那么則可使用下面語句刪除約束
-- 查詢約束與索引信息 select a.owner 約束所有者, a.constraint_name 約束名, case a.constraint_type when 'P' then 'Primary key' when 'U' then 'Unique key' when 'C' then ' Check constraint on a table' when 'R' then 'Referential integrity' when 'V' then 'With check option, on a view' when 'O' then 'With read only, on a view' when 'H' then 'Hash expression' when 'F' then 'Constraint that involves a REF column' when 'S' then 'Supplemental logging' else 'unkown' end 約束類型, b.table_name 表名, b.column_name 列名, c.index_name 索引名, c.uniqueness 是否唯一索引/*, d.table_name 表名, d.column_name 列名*/ from user_constraints a, user_cons_columns b, user_indexes c/*, user_ind_columns d*/ where a.constraint_name = b.constraint_name and a.index_name = c.index_name /*and c.index_name = d.index_name*/ and a.owner = b.owner and a.owner = c.table_owner and a.owner = &"[擁有者]" and a.constraint_name = &"[約束名]"; -- 由於如果約束對應的唯一索引若是事先手工創建的,那么在刪除約束時索引不會被刪除,Oracle之后自動刪除自己隱式創建的索引。 -- 因此加上drop index,可確保一定將索引刪除。 alter table [表名] drop constraint [約束名] drop index; -- 如果是主鍵約束,有可能遇到有用作外鍵的情況,那么在刪除時仍會報=>ORA-02273: 此唯一/主鍵已被某些外鍵引用 -- 報錯后了解是否有問題,是否需去除此主鍵和外鍵,然后可考慮用下面語句刪除主鍵約束,會同時刪除外鍵約束 alter table [表名] drop constraint [約束名] cascade drop index; alter table [表名] drop primary key cascade drop index; -
如果分析確定是值重復,那么需排查表數據與預執行的SQL語句的重復值沖突、同一個事務內執行的SQL語句之間的重復值沖突,去掉重復值的插入或更新。
-
- 備注:
- 唯一約束與主鍵約束的同:
- 都通過唯一索引來限制約束列的唯一性,確保任何使表中約束的列在行與行之間存在重復值的操作失敗
- 若無事先創建好唯一索引,都會在創建唯一約束或主鍵約束時隱式創建同名的唯一約束
- 有約束必定有索引(無法在保持約束存在的情況下刪除索引=>ORA-02429: 無法刪除用於強制唯一/主鍵的索引)
- 有索引不一定有約束(只刪除約束但不刪除索引則仍然會限制索引列的值的唯一性)
- 唯一約束與主鍵約束的異:
- 唯一約束允許在該列或多列上存在NULL值,但主鍵約束不能存在NULL值
- 一個表只能創建一個主鍵約束,但可創建多個唯一約束
- 主鍵可擴展作為外鍵,唯一約束不可
- 唯一約束與主鍵約束的同:
ORA-00017: 會話被要求設置跟蹤事件
ORA-00017: session requested to set trace event
原因1: 當前會話被要求通過另一個會話設置一個跟蹤事件
The current session was requested to set a trace event by another session.
- 狀態: 來源ORA12_ERRMG。
-
措施: 內部使用;無需操作。
This is used internally; no action is required.
ORA-00018: 超出最大會話數
ORA-00018: maximum number of sessions exceeded
原因1: 所有會話狀態對象都在使用中
All session state objects are in use.
- 狀態: 部分驗證。
- 分析: 很明顯,系統中所有會話數目已經達到設置的SESSIONS值,因此准備要創建的會話無法成功創建,而這個會話包括有用戶建立連接至數據庫是產生的會話、后台進程產生的會話以及各類涉及到硬解析處理數據字典基表的DML、DDL語句產生的遞歸會話。
-
措施: 增加SESSIONS初始化參數值。【是否需要增加SESSIONS值還需進行判斷,是否是由於此值過小而現實場景需要更大的值?】
Increase the value of the SESSIONS initialization parameter.
-
如果判斷確定是由於SESSIONS值過小導致,則需修改增大此參數值【已驗證】:
alter system set 參數名=參數值 [comment='注釋'] [deferred] [scope=memory|spfile|both] [sid='sid|*']; /* comment='注釋',修改時可添加注釋,會在V$PARAMETER視圖的update_comment字段看到內容,和參數值生效情況保存一致; deferred,指定參數修改是否只對以后的會話生效(對當前建立的會話無效,包括執行此修改的會話),部分參數必須加此參數; scope=both,表示修改會立即生效且會修改spfile文件以確保數據庫在重啟后也會生效如果(以spfile啟動此項為缺省值); scope=memory,表示修改會立即生效但不會修改spfile文件,因此重啟后失效(以pfile啟動此項為缺省值,且只可設置這個值); scope=spfile,表示只修改spfile文件,在重啟實例后才生效(以spfile啟動且為靜態參數則必須設置此項值); sid='sid|*',默認是sid=*,可改為在集群環境中的一個指定的實例值。 */ -- 查看"ALTER SYSTEM修改模式"列值,根據結果進行修改 select name 參數名, case type when 1 then 'Boolean' when 2 then 'String' when 3 then 'Integer' when 4 then 'Parameter file' when 5 then 'Reserved' when 6 then 'Big integer' else 'unknown' end 參數類型, value "會話級(若可修改)或實例級參數值", display_value 展示值, isses_modifiable "是否可用ALTER SESSION修改", case issys_modifiable when 'IMMEDIATE' then '無論pfile還是spfile啟動,都可用"alter system set ' || name || '=&' || '新的參數值;"更改參數並立即生效。' when 'DEFERRED' then '無論pfile還是spfile啟動,都要用"alter system set ' || name || '=&' || '新的參數值 deferred;"更改參數並將在之后的會話中生效。' when 'FALSE' then case a.is_spfile when 0 then '使用pfile啟動,需手動修改pfile文件中對應參數值再重啟。' else '使用spfile啟動,可用"alter system set ' || name || '=&' || name || ' scope=spfile;"更改參數。更改將在后續的實例中生效(當前數據庫需重啟)。' end else '?' end "ALTER SYSTEM修改模式", isinstance_modifiable "是否不同實例間值可不同" from v$parameter, (select count(1) is_spfile from v$parameter t where t.name = 'spfile' and t.value is not null) a where name = 'sessions'; -
如果判斷確定SESSIONS值合理,則需分析確定產生大量會話的原因,是否相關程序代碼建立了連接未釋放?或者其它原因等。【待完善】
-
-
備注: 參數SESSIONS:
| 屬性 | 描述 |
|---|---|
| 參數類型 | Integer |
| 默認值 | 派生公式: 【?~11gR1】="(1.1 * PROCESSES) + 5)"; 【11gR2~12cR2】="(1.5 * PROCESSES) + 22" |
| 可修改(不用重啟及時生效) | 【?~11gR2】="否"; 【12cR1~12cR2】="可用ALTER SYSTEM修改" |
| 取值范圍 | 【?~11gR1】="1~2^31"; 【11gR2~12cR2】="1~2^16(即1~65536)" |
| 基礎參數 | 是 |
SESSIONS指定可以在系統中創建的最大會話數。因為每次登錄都需要一個會話,所以這個參數有效地確定了系統中最大並發用戶數。您應該始終將此參數顯式設置等於最大並發用戶數的估計值+后台進程數+遞歸會話數(大約占總數的10%)。
Oracle使用此參數的默認值作為其最小值。 將SESSIONS值設置成[1~默認值)不會觸發錯誤,因為Oracle會忽略此值直接使用默認值。
ENQUEUE_RESOURCES和TRANSACTIONS參數的默認值派生自SESSIONS。因此,如果增加SESSIONS的值,則應考慮是否也調整ENQUEUE_RESOURCES和TRANSACTIONS的值。 (請注意,從Oracle Database 10g release 2(10.2)起,ENQUEUE_RESOURCES已被廢棄。)
在共享服務器環境中,PROCESSES的值可能相當小。因此,Oracle建議您將SESSIONS的值調整為大約1.1 *總連接數。
ORA-00019: 超出最大許可會話數
ORA-00019: maximum number of session licenses exceeded
原因1: 所有許可會話都在使用中。
All licenses are in use.
- 狀態: 部分驗證。
- 分析: 很明顯,系統中並發用戶會話已經達到設置的LICENSE_MAX_SESSIONS值,因此准備要創建的用戶會話無法創建。
-
措施: 增大LICENSE_MAX_SESSIONS初始化參數的值。【是否需要增加LICENSE_MAX_SESSIONS值還需進行判斷,是否是由於此值過小而現實場景需要更大的值?】
Increase the value of the LICENSE MAX SESSIONS initialization parameter.
- 如果判斷確定是由於LICENSE_MAX_SESSIONS值過小導致,則需修改增大此參數值,【詳情參見ORA-00018=>原因1=>措施,將SQL語句中
name = 'sessions'修改為name = 'license_max_sessions'即可】 - 如果判斷確定LICENSE_MAX_SESSIONS值合理,則需分析確定產生大量會話的原因,是否相關程序代碼建立了連接未釋放?或者其它原因等。【待完善】
- 如果判斷確定是由於LICENSE_MAX_SESSIONS值過小導致,則需修改增大此參數值,【詳情參見ORA-00018=>原因1=>措施,將SQL語句中
-
備注: 參數LICENSE_MAX_SESSIONS:
| 屬性 | 描述 |
|---|---|
| 參數類型 | Integer |
| 默認值 | 0 |
| 可修改(不用重啟及時生效) | 可用ALTER SYSTEM修改 |
| 取值范圍 | 0~許可會話數 |
| 基礎參數 | 否 |
| Oracle實時應用集群 | 多個實例可以具有不同的值,但是安裝數據庫的所有實例的總和應小於或等於該數據庫許可的會話總數。 |
LICENSE_MAX_SESSIONS指定允許的並發用戶會話的最大數量。達到此限制后,只有具有RESTRICTED SESSION權限的用戶才能連接到數據庫。無法連接的用戶收到表示系統達到最大容量的警告消息。
零值表示不強制執行並發使用(會話)許可。如果將此參數設置為非零數字,則可能還需要設置LICENSE_SESSIONS_WARNING(請參閱“LICENSE_SESSIONS_WARNING”)。
不要同時啟用並發使用許可和用戶許可,即LICENSE_MAX_SESSIONS與LICENSE_MAX_USERS兩參數值至少一個要設置為零。
ORA-00020: 超出最大進程數(string=>[最大進程數])
ORA-00020: maximum number of processes (string) exceeded
原因1: 所有進程狀態對象都在使用中。
All process state objects are in use.
- 狀態: 部分驗證。
- 分析: 很明顯,系統中進程數已經達到設置的PROCESSES值,因此准備要創建的用戶會話無法創建。
-
措施: 增加PROCESSES初始化參數的值。【是否需要增加PROCESSES值還需進行判斷,是否是由於此值過小而現實場景需要更大的值?】
Increase the value of the PROCESSES initialization parameter.
- 如果判斷確定是由於PROCESSES值過小導致,則需修改增大此參數值,【詳情參見ORA-00018=>原因1=>措施,將SQL語句中
name = 'sessions'修改為name = 'processes'即可】 - 如果判斷確定PROCESSES值合理,則需分析確定產生大量進程的原因,是否相關程序代碼建立了連接未釋放?或者其它原因等。【待完善】
- 如果判斷確定是由於PROCESSES值過小導致,則需修改增大此參數值,【詳情參見ORA-00018=>原因1=>措施,將SQL語句中
-
備注: 參數PROCESSES:
| 屬性 | 描述 |
|---|---|
| 參數類型 | Integer |
| 默認值 | 【?~10gR2】="40~操作系統依賴數"; 【11gR1~11gR2】="100"; 【12cR1~12cR2】="該值是派生的,它通常取決於警報日志中報告的核心數。" |
| 可修改(不用重啟及時生效) | 否 |
| 取值范圍 | 6~操作系統依賴數 |
| 基礎參數 | 是 |
| Oracle實時應用集群 | 多個實例可以具有不同的值。 |
PROCESSES指定可以同時連接到Oracle的最大操作系統用戶進程數。它的值應允許所有后台進程運行,如鎖,作業隊列進程和並行執行進程。
該參數派生了SESSIONS和TRANSACTIONS參數的默認值。因此,如果更改PROCESSES的值,則應評估是否要調整這些派生參數的值。
ORA-00439: 未啟用功能: 【功能名】
ORA-00439: feature not enabled: string
原因1: 指定的功能未啟用。
The specified feature is not enabled.
- 狀態: 已驗證。
- 分析: ORACLE:你要多給我點錢,知道不!
-
措施: 不要嘗試使用此功能。
Do not attempt to use this feature.
- 哎,哥們,實在想用此項功能,那就換高版本換企業版之類有這個功能的數據庫吧。
- 如果是別人庫導過來的,嗯,它的庫鄙視了下你的庫,擦把汗告訴別人導出時指定下低版本。
ORA-01502: 索引 '(SCHEMA名).(索引名)' 或這類索引的分區處於不可用狀態
ORA-01502: index 'string.string' or partition of such index is in unusable state
原因1: 試圖連接訪問被"直接負載?"或DDL語句操作標記為不可用狀態的索引或索引的分區
An attempt has been made to access an index or index partition that has been marked unusable by a direct load or by a DDL operation
- 狀態: 已驗證。
-
分析: 一般是因為在執行DML語句操作表數據時,表上用到了主鍵約束、唯一約束需要用到索引的或者是表上單獨設置了唯一索引的或者是其它情況需要處理到索引或索引分區的,而此時索引或索引分區卻是被標記為不可用狀態,導致想執行的操作無法執行而報錯。如下例所示:
-- 創建表與主鍵 create table ora_01502_1(a number, b varchar2(30)); alter table ora_01502_1 add constraints pk_ora_01502_1_a primary key(a); -- 標記索引UNUSABLE alter index pk_ora_01502_1_a unusable; -- 執行插入語句報錯 insert into ora_01502_1 (a,b) values(1,'1'); -- 查看索引、約束狀態。索引不可用,約束生效 select t.status, t.* from user_indexes t where t.table_name = 'ORA_01502_1'; select t.status, t.* from user_constraints t where t.table_name = 'ORA_01502_1'; -- 創建表與唯一索引 create table ora_01502_2(a number, b varchar2(30)); create unique index pk_ora_01502_2_a on ora_01502_2(a); -- 標記索引UNUSABLE alter index pk_ora_01502_2_a unusable; -- 執行插入語句報錯 insert into ora_01502_2 (a,b) values(1,'1'); -- 查看索引狀態。索引不可用 select t.status, t.* from user_indexes t where t.table_name = 'ORA_01502_1'; -
措施: DROP指定的索引,或REBUILD指定的索引,或REBUILD不可用的索引分區
DROP the specified index, or REBUILD the specified index, or REBUILD the unusable index partition
- 如果需要修復索引或索引分區,通過rebuild進行重建。
- 如果需要去掉索引,通過drop命名刪除,如果有約束得先刪除約束(如果是創建約束時系統自動創建的索引會在刪除約束時一起刪除),然后再刪除索引(如果是創建約束前手工建立的索引,那么還需要手工維護進行刪除)
ORA-01722: 無效數字
ORA-01722: invalid number
原因1: 指定的數字無效
The specified number was invalid.
- 狀態: 已驗證。
-
分析: 究其根本在於,要執行的語句在人為顯式轉換或Oracle判斷決定隱式轉換,故意或非故意得使一個非數值類型且無法轉換為數值類型的值轉換為數值類型失敗導致的。如下幾例:
-
顯式轉換:
-- to_number、to_binary_float、to_binary_double轉換字符串為數值 select to_number('2017年') from dual; select to_binary_float('8.935M') from dual; select to_binary_double('0.001s') from dual; -
隱式轉換:
---------涉及到數值類型列的賦值或函數需要函數數值類型結果的轉換--------- -- insert/update/merge等語句操作列值 -- 測試表 create table ora_01722_1( a number, b char(24), c varchar2(300) ); -- 插入賦值,無法隱式轉換成數值,報錯 insert into ora_01722_1(a) values ('111測試字符串'); -- 插入賦值,可以隱式轉換成數值,不報錯 insert into ora_01722_1(a, b) values ('111', 'bbb'); commit; -- 更新賦值,無法隱式轉換成數值,報錯 update ora_01722_1 set a = '222測試字符串'; -- decode由第三列的數值1確定了該函數輸出結果為數值類型 -- 當匹配到'a'返回1,結果為數值,不報錯 select decode('a', 'a', 1, 'b', 2, 'c', 'three', 0) test1 from dual; -- 當匹配到'c'返回'three',結果不為數值且無法轉換為數值,報錯 select decode('c', 'a', 1, 'b', 2, 'c', 'three', 0) test2 from dual; -- nvl由第一列輸入的數值確定了它在此時輸出的結果也會為數值類型 -- 當發現第一個值不為空時,就嘗試輸出后邊的值作為本次nvl函數操作后的數值結果,發現無法轉換為數值,報錯 select nvl(&請輸入數值, '測試') from dual; -- nvl2由第二列的2確定了它在此時輸出的結果也會為數值 -- 當不管結果是否為2,它都會講后邊的值進行測試轉換……所以無論是否輸入null都報錯 select nvl2(&無論是否null, 2, '測試') from dual; ---------涉及到與數值類型的比較或其它運算--------- -- 未比較到'三',不報錯 select decode(1, 1, 'one', 2, 'two', '三', 'three', 'zero') from dual; -- 比較到'三',報錯 select decode(3, 1, 'one', 2, 'two', '三', 'three', 'zero') from dual; -- 與數值進行算術運算,無法隱式轉換為數值,報錯 select 'a' + 2 from dual; -- 與ora_01722_1的數值類型列a進行比較,將右邊轉換為數值失敗,報錯 select * from ora_01722_1 t where t.a = 'a'; -- ora_01722_1列b與數值類型進行比較,將左邊轉換為數值失敗,報錯 select * from ora_01722_1 t where t.b = 2;特別注意時靈時不靈的查詢,基本都類似於下面的情況,靈的時候是因為之前查詢的是部分表數據或部分視圖數據等,不靈的時候則是涉及到另一部分甚至是全表全視圖的數據,而由於未注意隱式轉換導致其中“臟數據”無法轉換成數值類型而報錯。根源不是數據臟,是使用者不注意字段類型的區分,所以我們不要依賴於Oracle的隱式轉換!
-
-
措施: 指定一個有效的數字。
Specify a valid number.
- 根據分析的情況,明確是否需要主動轉換,是否數據存在問題,該是數值就傳數值,該是字符串就添加左右英文單引號包裹成字符串。
-
備注: 當需要的時候,Oracle數據庫會自動將值從一種數據類型轉換為另一種(如CHAR、VARCHAR2、NCHAR、NVARCHAR2、BINARY_FLOAT、BINARY_DOUBLE就有可能隱式轉換為NUMBER)。由於以下原因,Oracle建議您指定顯式轉換,而不是依賴於隱式自動轉換:
- 當您使用顯式數據類型轉換函數時,SQL語句更容易理解。
- 隱式數據類型轉換可能會對性能產生負面影響,特別是如果列值的數據類型被隱式轉換為基本常量的數據類型,而不是主動轉為其它類型。
- 隱式轉換要根據需要轉換時的上下文來決定,而且在每類場景中不一定產生一樣的效果。例如,從datetime值到varchar2值的隱式轉換可能會根據NLS_DATE_FORMAT參數的值返回意外的一年。
- 隱式轉換的算法可能會隨着軟件版本和Oracle產品之間的變化而變化。顯式轉換的變化則更有預見性。
- 如果在索引表達式中產生了隱式數據類型轉換,那么Oracle數據庫可能不會使用該索引,因為它是為轉換前數據類型定義的。這可能會對性能產生負面影響。
ORA-01747: 用戶.表.列、表.列或列格式無效
ORA-01747: invalid user.table.column, table.column, or column specification
原因1: 列名為關鍵字。
- 狀態: 已驗證。
-
分析: 一般為在SQL語句或存儲過程、函數等中使用到的此字段為oracle的保留關鍵字,且保留方式標識了此關鍵字在某些情況下,例如在DML中是否不允許作為標識符的。如下列情況:
-- 查詢能做屬性但不能作為標識符或某些場景(如DML操作)下不能作為標識符的關鍵字 select t.* from v$reserved_words t where (t.res_semi = 'Y' or t.reserved = 'Y') and t.res_attr = 'N'; -- 根據上面關鍵字建表,為測試需要,實際使用時請避免將Oracle保留關鍵字作為表的字段! create table ora_01747_1 ( "TRIGGER" number, "WHERE" number, "REVOKE" number, "INCREMENT" number, "THEN" number, "FILE" number, "PRIOR" number, "CONNECT" number, "COMMENT" number, "SYSDATE" number, "ONLINE" number, "DECIMAL" number, "SESSION" number, "MODIFY" number, "IN" number, "@" number, "," number, "GRANT" number, "INTO" number, "VALIDATE" number, "." number, "ADD" number, "ORDER" number, "HAVING" number, "TO" number, "NULL" number, "RENAME" number, "LEVEL" number, "USER" number, "ANY" number, /*"ROWID" number, --不可作建表屬性*/ "SHARE" number, "MODE" number, "UNION" number, "/" number, "SET" number, "INDEX" number, "MAXEXTENTS" number, "VALUES" number, "|" number, "VIEW" number, "[" number, "WITH" number, "EXCLUSIVE" number, "ALTER" number, "FROM" number, "SELECT" number, "BY" number, "-" number, "MLSLABEL" number, "AND" number, "+" number, "ROWS" number, "CHECK" number, ":" number, "VARCHAR2" number, "IMMEDIATE" number, "CURRENT" number, "AS" number, "*" number, "TABLE" number, "LONG" number, "SYNONYM" number, "ASC" number, "UNIQUE" number, "LIKE" number, "DESC" number, "VARCHAR" number, "INITIAL" number, "CHAR" number, "=" number, "DROP" number, "AUDIT" number, "ROWNUM" number, "FLOAT" number, "COMPRESS" number, "OFFLINE" number, "NOT" number, "DELETE" number, "^" number, "BETWEEN" number, "EXISTS" number, "IDENTIFIED" number, "WHENEVER" number, "INTEGER" number, "SIZE" number, "NOWAIT" number, ")" number, "]" number, "NOCOMPRESS" number, "COLUMN" number, "ELSE" number, "FOR" number, "INTERSECT" number, "!" number, "PRIVILEGES" number, "SUCCESSFUL" number, "PCTFREE" number, "UPDATE" number, "ACCESS" number, "RESOURCE" number, "UID" number, "DATE" number, "NOAUDIT" number, "RAW" number, /*"&" number,--不可作建表屬性 */"OPTION" number, "ROW" number, "SMALLINT" number, "MINUS" number, "OF" number, "ON" number
