0

我有一个包含几列的表,如下所示:

CREATE TABLE CRM.INFO_ADICIONAL
(
  ID_INFO_ADICIONAL        NUMBER(10)           NOT NULL,
  NOMBRE                   VARCHAR2(100 BYTE)   NOT NULL,
  OBLIGATORIO              NUMBER(1)            NOT NULL,
  TIPO_DATO                VARCHAR2(2 BYTE)     NOT NULL,
  ACTIVO                   NUMBER(1)            NOT NULL,
  ID_TIPO_REQUERIMIENTO    NUMBER(10)           NOT NULL,
  ID_USUARIO_AUDIT         NUMBER(10)           NOT NULL,
  ORDEN                    NUMBER(3)            DEFAULT 1,
  RECHAZO_POR_NO           NUMBER(1),
  ID_TIPO_ARCHIVO_ADJUNTO  NUMBER(10),
  SOLICITAR_EN             VARCHAR2(30 BYTE),
  ID_CONSULTA              NUMBER(10),
  COMBO_ID                 VARCHAR2(40 BYTE),
  APLICAR_COMO_VENC        NUMBER(1),
  MODIFICABLE              NUMBER(1)            DEFAULT 0,
  ID_AREA_GESTION          NUMBER(10),
  ID_TAREA                 NUMBER(10)
)

COMBO_ID”列是目标。它被定义为 VARCHAR,但是当我尝试插入一行时,TOAD 显示

“ORA-06502: PL/SQL: 错误: error de conversión de carácter a número numérico o de valor”

或英文的“数字转换错误”。

这个表有一些预先存在的数据,我什至发现了一些行,包括 COMBO_ID 列的值,它们都是 VARCHAR,即:

NACION(民族)、SEXO(性)等

我尝试了一些简单的 SELECT 语句

SELECT
    ID_INFO_ADICIONAL,
    NOMBRE,
    OBLIGATORIO,
    TIPO_DATO,
    ACTIVO,
    ID_TIPO_REQUERIMIENTO,
    ID_USUARIO_AUDIT,
    ORDEN,
    RECHAZO_POR_NO,
    ID_TIPO_ARCHIVO_ADJUNTO,
    SOLICITAR_EN,
    COMBO_ID,
    APLICAR_COMO_VENC,
    ID_CONSULTA,
    MODIFICABLE,
    ID_AREA_GESTION,
    ID_TAREA
INTO
    pRegistro
FROM
    crm.info_adicional

其中pRegistro被声明为

pRegistro INFO_ADICIONAL%ROWTYPE;

同样,我仍然收到此“数字转换错误”。但是,等等,如果我用 NUMBER 对 COMBO_ID 列中的 SELECT 值进行硬编码:

SELECT
    --other columns
    123456 COMBO_ID,
    --other columns
INTO
    pRegistro
FROM
    crm.info_adicional

它有效,见鬼,它被定义为 VARCHAR。如果我做同样的事情但对字符串进行编码,它将无法再次执行

已经在我的 DEV 环境中尝试过,它工作正常。

我不是甲骨文的专业人士,但我感到很失落。会不会是表格变得“混乱”?有什么线索吗?

4

2 回答 2

0

如果您尝试推送长于 VARCHAR2 容量(在您的情况下为 40)的字符串,也会引发该错误。

尝试检查您尝试插入的所有数据是否正确:

SELECT
    COMBO_ID
FROM
    crm.info_adicional
ORDER BY length(COMBO_ID) desc;

这也可以解释为什么它在您的 DEV 环境中运行良好,我想它具有不同的数据。

于 2018-01-03T20:58:42.680 回答
0

好的,我已经找到答案了。

引用 Oracle 文档:

%ROWTYPE 属性提供表示表或视图中的行的记录类型。行中的列和记录中的相应字段具有相同的名称和数据类型。

因此,基本上,SELECT 语句需要与表列定义的顺序相同。

就我而言,我有几列(包括 COMBO_ID)以不同的顺序排列。尝试过,重新订购,并且像魅力一样工作。

谢谢大家的支持。

于 2018-01-04T14:21:58.393 回答