Ошибка "ORA-01722: неверный номер" во многих местах была создана
Я получаю ошибку "ORA-01722: неверный номер" во многих местах с драйвером Oracle. Можете ли вы указать на обходной путь / решение?
PDOException: SELECT base.fid AS fid, base.uid AS uid,
base.filename AS filename, base.uri AS uri, base.filemime AS filemime,
base.filesize AS filesize, base.status AS status, base.timestamp AS timestamp
FROM {file_managed} base
WHERE (base.fid IN (:db_condition_placeholder_0))
(prepared: SELECT base.fid AS fid, base."UID" AS "UID",
base.filename AS filename, base.uri AS uri, base.filemime AS filemime,
base.filesize AS filesize, base.status AS status, base.timestamp AS timestamp
FROM "FILE_MANAGED" base
WHERE (base.fid IN (:db_condition_placeholder_0))
)
e: SQLSTATE[HY000]: General error: 1722
OCIStmtExecute: ORA-01722: invalid number (ext\pdo_oci\oci_statement.c:146)
args: Array ( [:db_condition_placeholder_0] => )
in DrupalDefaultEntityController->load()
(line 196 of C:\xampp\htdocs\new\drupal\includes\entity.inc).
1 ответ
Без контекста нам трудно быть уверенным. Но я в угадывающем настроении, так что здесь идет:
base.fid
числовой столбец В :db_condition_placeholder_0
Вы пытаетесь передать цепочку токенов, таких как "23, 42, 69"
,
Теперь вы надеетесь на то, что движок SQL изменит это вместе, чтобы создать такую строку:
where base.fid in (23, 42, 69)
Увы, что он на самом деле генерирует это:
where base.fid in ('23, 42, 69')
... что логически совпадает с:
where base.fid = to_number('23, 42, 69')
Очевидно, что строка не является допустимым числом и, следовательно, ORA-1722.
Теперь, что вы делаете по этому поводу, это сложный вопрос. Существует несколько различных подходов, включая вложенные таблицы или массивы, конвейерные функции и динамический SQL. Какой из них подойдет вам лучше всего, зависит от деталей вашего требования.
Плюс, конечно, я все равно догадываюсь о вашей проблеме:-)