未实现Oracle类型2010和本机类型3000之间的cx\U Oracle转换

2024-10-01 15:36:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用cx_Oracle从用户定义类型(UDT)中提取数据。我可以提取一些UDT的数据没有问题,但对于一个特定的UDT,我无法提取数据。 Oracle中类型的结构:

CREATE OR REPLACE TYPE graphic_component AS OBJECT (
   type             NUMBER(6),
   source_type      NUMBER(4),
   meta_type_id     VARCHAR2(50 CHAR),
   name             VARCHAR2(100 CHAR),
   extension_info   VARCHAR2(500 CHAR),
   symbology_tokens VARCHAR2(2000 CHAR)
);

CREATE OR REPLACE TYPE graphic_component_array AS
      VARRAY (10000) OF graphic_component;

在Python中,使用以下代码提取UDT(code from here):

^{pr2}$

如果我试图从UDT中提取数据,就会出现以下错误:

<cx_Oracle.Object GRAPHIC_COMPONENT_ARRAY at 0x26c9f10>
Traceback (most recent call last):
  File "C:/Users/petr.silhak/PycharmProjects/migration-to-postgresql/test_parsing.py", line 34, in <module>
    print(ObjectRepr(complex[0][0]))
  File "C:/Users/petr.silhak/PycharmProjects/migration-to-postgresql/test_parsing.py", line 9, in ObjectRepr
    value = ObjectRepr(value)
  File "C:/Users/petr.silhak/PycharmProjects/migration-to-postgresql/test_parsing.py", line 14, in ObjectRepr
    value = getattr(obj, attr.name)
cx_Oracle.DatabaseError: DPI-1014: conversion between Oracle type 2010 and native type 3000 is not implemented

它看起来像是数据类型的Oracle odpi转换有问题。在这个特定的示例中,数据如下所示(来自SQL developer):

GRAPHIC_COMPONENT(1007,17,'gtda_5012101_1',NULL,NULL,NULL,NULL)

Tags: 数据typenullusersfilecomponentoraclecx

热门问题