Ошибка преобразования 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, которая, я полагаю, имеет другие данные.