Ошибка преобразования varchar в числовое значение (но номер отсутствует)

У меня есть таблица с несколькими столбцами, например:

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: ошибка: ошибка разговора по количеству символов"

Или "ошибка преобразования чисел" на английском языке.

В этой таблице есть некоторые уже существующие данные, и я даже нашел несколько строк, включающих значения в столбце COMBO_ID, все из которых являются VARCHAR, то есть:

NACION (Нация), СЕКС (Секс) и т. Д.

Я попробовал несколько простых операторов 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;

Опять же, я все еще получаю эту "ошибку преобразования чисел". Но подождите, если я жестко закодирую значение SELECT в столбце COMBO_ID с помощью NUMBER:

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

Это работает, какого черта, это определяется как VARCHAR. Если я делаю то же самое, но кодирую строку, она не может быть выполнена снова

Уже пробовал в моей среде DEV, и она работает нормально.

Я не профессионал в Oracle, но я чувствую себя довольно потерянным. Может быть, таблицы запутались? Есть какие-нибудь подсказки?

2 ответа

Решение

Хорошо, я уже нашел ответ.

Цитирование документации Oracle:

Атрибут%ROWTYPE предоставляет тип записи, представляющий строку в таблице или представлении. Столбцы в строке и соответствующие поля в записи имеют одинаковые имена и типы данных.

Таким образом, в основном оператор SELECT должен быть в том же порядке, что и определение столбцов таблицы.

В моем случае у меня было несколько столбцов (включая COMBO_ID) в другом порядке. Попробовал, переупорядочил, и работает как шарм.

Спасибо всем за поддержку.

Эта ошибка также может возникать, если вы пытаетесь выдвинуть строку символов, которая длиннее, чем емкость вашего VARCHAR2 (в вашем случае 40).

Попробуйте проверить правильность всех данных, которые вы пытаетесь вставить:

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

Это также объясняет, почему он отлично работает в вашей среде DEV, которая, я полагаю, имеет другие данные.

Другие вопросы по тегам