Am使用以下代码尝试将数据帧存储到oracle表中
如果省略dtype={'PN': types.VARCHAR}
merged.to_sql('table1', conn, if_exists='append', index=False, dtype={'PN': types.VARCHAR})
否则会抛出
sqlalchemy.exc.OperationalError: (cx_Oracle.OperationalError) ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 13
ORA-00906: missing left parenthesis
[SQL:
CREATE TABLE tabl1(
"PN" VARCHAR,
"DT" DATE,
"COL1" FLOAT,
"COL2" NUMBER(19),
"COL3" NUMBER(19),
"COL4" FLOAT,
"COL5" FLOAT,
"COL6" FLOAT
)
]
答案 0 :(得分:0)
Oracle期望“创建表” DDL语句中varchar列的长度。如Gord所建议,在括号中提供一个介于1到255之间的值将解决此问题。您可以尝试dtype = {'PN':types.VARCHAR(255)}。 如果您想知道数据库中发生了什么,我已经在dbfiddle-Oracle 18c Express版本上重现了该问题,您可以检出该问题。 https://dbfiddle.uk/?rdbms=oracle_18&fiddle=9362757cfcb1cfc3052425190367d3d8
由于以下原因,我不建议使用varchar来存储字母数字数据: