我有一个包含多个列的表,如下所示:
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:错误:错误转换decartácteranúmero numéricoode 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环境已经尝试过了,它运行正常。
我不是甲骨文的专家,但我感到非常迷茫。 表格是否会“混淆”? 有线索吗?
答案 0 :(得分:0)
如果您尝试推送长度超过VARCHAR2容量的字符串(在您的情况下为40),也会引发该错误。
尝试检查您尝试插入的所有数据是否正确:
SELECT
COMBO_ID
FROM
crm.info_adicional
ORDER BY length(COMBO_ID) desc;
这也可以解释为什么它在您的DEV环境中正常工作,我认为它具有不同的数据。
答案 1 :(得分:0)
好的,我已经找到了答案。
引用Oracle文档:
%ROWTYPE属性提供表示表或视图中的行的记录类型。 一行中的列和记录中的相应字段具有相同的名称和数据类型。
因此,基本上,SELECT语句需要与表列定义的顺序相同。
在我的情况下,我有一些不同的列(包括COMBO_ID)。 尝试,重新订购,并像一个魅力。
谢谢大家的支持。