我使用 Python 和 cx_Oracle 来处理 Oracle 11g。
我有以下 SQL 与 MySQL/PostgreSQL 配合良好,
stock_info_create = 'CREATE TABLE STOCK_INFO(' + \
'CODE VARCHAR2(255) NOT NULL,' + \
'NAME VARCHAR2(255) NOT NULL,' + \
'TIMETOMARKET VARCHAR2(255),' + \
'PRIMARY KEY (CODE)' + \
');'
返回的消息是
(cx_Oracle.DatabaseError) ORA-00911: invalid character
[SQL: 'CREATE TABLE STOCK_INFO(CODE VARCHAR2(255) NOT NULL,NAME VARCHAR2(255) NOT NULL,TIMETOMARKET VARCHAR2(255),PRIMARY KEY (CODE));']
当然,为了在Oracle中使用这个sql,我将VARCHAR更改为VARCHAR2,因为我认为错误是由错误的数据类型引起的。但改成VARCHAR2后还是不行。
另一个问题是表创建。
stock_h_create = 'CREATE TABLE STOCK_H_NONE(' + \
'CODE VARCHAR(16) NOT NULL,' + \
'DATE DATE,' + \
'OPEN FLOAT,' + \
'HIGH FLOAT,' + \
'CLOSE FLOAT,' + \
'LOW FLOAT,' + \
'VOLUME FLOAT,' + \
'AMOUNT FLOAT,' + \
'AUTYPE VARCHAR(16),' + \
'LAST_UPDATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,' + \
'PRIMARY KEY (CODE,AUTYPE,DATE)' + \
');'
返回的消息是
Creating table STOCK_H_NONE... (cx_Oracle.DatabaseError) ORA-00904: : invalid identifier
[SQL: 'CREATE TABLE STOCK_H_NONE(CODE VARCHAR(16) NOT NULL,DATE DATE,OPEN FLOAT,HIGH FLOAT,CLOSE FLOAT,LOW FLOAT,VOLUME FLOAT,AMOUNT FLOAT,AUTYPE VARCHAR(16),LAST_UPDATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (CODE,AUTYPE,DATE));']
感谢您的任何帮助和访问。
最佳答案
Oracle 中的某些保留字不允许用作列名 - 数据类型属于这些保留字,例如日期
,数字
。由于 Date
列,您收到“ORA-00904:无效标识符”错误。为了获得良好的实践,请尝试避免使用保留字作为列名称。
关于python - 简单建表sql适用于mysql和postgre,但在oracle中报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733212/