首页 > 解决方案 > 将多个数据帧列 int64 dtype 转换为相当于 oracle 的 NUMBER(20,3) 数据类型

问题描述

我正在尝试在 oracle DB 表中插入数据框,但表中的某些列的数据类型为NUMBER(20,3)

我假设这是 float 。

如何将数据类型为int64的列转换为NUMBER(20,3)等效项,因为它给出了无效标识符错误

标签: pythonpandasoraclesqlalchemyoracle-sqldeveloper

解决方案


number(20, 3)在 Oracle 中表示该列接受总共有 20 位数字的数值,而这 20 位中的 3 位保留给小数。例如:

SQL> create table test (id number, value number(20, 3));

Table created.

让我们插入一些值:

SQL> insert into test (id, value) values (1, 12.43);

1 row created.

SQL> insert into test (id, value) values (2, 12.4356);

1 row created.

SQL> insert into test (id, value) values (3, 12345678901234567.987);

1 row created.

表内容:没有惊喜:

SQL> select * from test;

        ID      VALUE
---------- ----------
         1      12,43
         2     12,436
         3 1,2346E+16

如果插入超过 3 个十进制数字怎么办?Oracle 将执行回合

SQL> insert into test (id, value) values (4, 12.4327);

1 row created.

但是,您报告了无效标识符错误。这与您插入的内容无关,而是无效的列名。看看:我将id列“重命名”为idxyzOracle 引发了您提到的错误:

SQL> insert into test (idxyz, value) values (5, 123);
insert into test (idxyz, value) values (5, 123)
                  *
ERROR at line 1:
ORA-00904: "IDXYZ": invalid identifier


SQL>

因此,您使用的检查语句看起来像是拼错了一个(或多个)列名。注意列名周围的双引号(在 Oracle 中,我们通常不使用它们)并且 - 如果您确实有双引号 - 也要注意字母大小写。


哦,是的:如何转换int64number(20, 3)?不知道,我不使用Python。


推荐阅读