【現象】:在想一個表中插入資料時,老是報出語法錯誤。
例如:insert into acc.t_rpt_column_info (COLUMN_ID, TABLE_ID, COLUMN_NAME, order, POSITION, DATA_TYPE, DATA_TYPE_DESC, DICTIONARY_TYPE_ID, CONS_RULE, CONS_DESC, TXT_ID, TXT_COLUMN_ID, IS_SHOW, TAG_TYPE, CAN_MODIFY, HAS_INNER_TABLE, LOG_COLUMN_ID, IS_ENABLED, CAN_INPUT)
values ('ACTIONTYPE', 't_base_account', '操作類型', 1, '01', 's,1,1', '[操作類型]不可為空且必須在字典表中有對照。', 'ACTIONTYPE', '', '必輸項', 48, 1, '1', '3', '1', '0', 'column18', '1', '1');
在oracle sql文法中表欄位名字是不允許出現oracle保留的關鍵字,如:select,from,where,and,or,order,group,by 等。如果想要使用關鍵字可以加“”;
測試:
SQL> create table t1 (order number,group varchar2(10));
create table t1 (order number,group varchar2(10))
*
ERROR at line 1:
ORA-00904: : invalid identifier
SQL> create table t1 ("order" number,"group" varchar2(10));
Table created.
SQL> desc t1;
Name Null? Type
----------------------------------------- -------- ----------------------------
order NUMBER
group VARCHAR2(10)
SQL> insert into t1 (order,group) values (1,test);
insert into t1 (order,group) values (1, 'test')
*
ERROR at line 1:
ORA-00928: missing SELECT keyword
SQL> insert into t1 values (1,'test');
1 row created.
SQL> insert into t1 ("order","group") values (2,'test2');
1 row created.
SQL> select * from t1;
order group
---------- ----------
1 test
2 test2
這樣的表是不是造成很多麻煩啊?
建議表中的欄位不要使用oracle保留的關鍵字。
要想知道oracle保留了哪些關鍵字,或者想知道使用的關鍵字是不是oracle保留的,很簡單:
select * from v$reserved_words;
select * from v$reserved_words where keyword = upper('keyword');
還有,預存程序中定義的變數名字不要和表中的欄位名一樣。如果這樣,預存程序編譯是可以通過的。但是進入表中的資料不對,這樣的錯誤很難排查的。