ORA-01036: недопустимое имя / номер переменной при выполнении запроса через C #

Ora 20200 при запросе в аис возникла ошибка см логи код 2

Не могли бы вы подсказать, что не так с моей реализацией?

Основная причина

В Oracle есть три типа операторов SQL (и, кроме того, есть блоки PL / SQL):

Переменные связывания в Oracle разрешены только в некоторых специальных местах в DML и операторах запросов. Вы пытаетесь использовать переменные связывания там, где это запрещено. Отсюда и ошибка.

Решение

Создайте свой оператор без переменных связывания. Вместо этого создайте полную строку запроса, используя конкатенацию строк.

Если вы хотите очистить ввод перед конкатенацией строки, используйте пакет DBMS_ASSERT.

Задний план

Переменные связывания можно использовать, только если Oracle может построить план запроса, не зная значения переменной. Для операторов DDL плана запроса нет. Следовательно, связывание переменных недопустимо.

Просто для других, которые получают эту ошибку и ищут информацию о ней, она также выдается, если вы случайно передаете параметр привязки, а затем никогда не используете его. Я нигде не мог найти четко изложенное, но мне пришлось доказывать это методом проб и ошибок.

Вы определили одну команду oracleCommand, но использовали ее как "for". это означает, что вы добавляете параметр с тем же именем в одну команду OracleCommand. вы должны использовать для обновления ваших параметров.

У меня было восемь параметров, и один был с пробелом в конце, как показано в приведенном выше коде для «GUSERID». Удалил пробел, и все начало работать.

Ошибка Oracle ORA-01036 означает, что в запросе где-то используется неопределенная переменная. Из запроса мы можем определить, какие переменные используются, а именно все, что начинается с @. Однако, если вы вводите это в расширенный запрос, важно подтвердить, что все переменные имеют соответствующий входной параметр, включая тот же регистр, что и в имени переменной, если ваша база данных Oracle чувствительна к регистру.

Эта ошибка возникает, когда вам также не хватает

У меня была такая же проблема в приложении, которое я поддерживал, среди всех настроек для подготовки среды я также почти час бился головой об этой ошибке «ORA-01036: недопустимое имя / номер переменной» пока я не узнал, что соединение приложения было направлено на устаревшую базу данных, поэтому приложение передало еще два параметра устаревшей процедуре базы данных, вызывающей ошибку.

Вы не можете передать имя пользователя / таблицы в pl / sql с параметром. Вы можете создать процедуру и построить sql, а затем немедленно выполнить для этого.

Иногда вы видите ошибку ora-00942 при выполнении оператора SQL. У него есть несколько причин, и, как обычно, синтаксис ошибок не является наиболее описательным. Если вы сталкиваетесь с этим и хотите знать, как исправить ошибку ora-00942, читайте дальше.

Насколько я знаю, есть три основные причины ошибки ora-00942:

Я покажу вам, как обратиться к каждому.

Исправьте ошибку ora-00942

Прежде всего, небольшой отказ от ответственности. Я не администратор баз данных, я администратор Windows, а также специалист по аппаратному и настольному оборудованию. Я знаю, как запустить SQL, но не до какой-то степени опыта и, конечно, не до уровня, который может устранять проблемы. Я должен был попросить моего друга Oracle DBA о помощи, поэтому, пока я писал эту часть, все умные биты принадлежали ему.

Этот список из трех причин ошибки ora-00942 не является исчерпывающим. Есть, очевидно, другие случайные причины этого, но эти три, по-видимому, наиболее распространены.

Недостаточно прав пользователя

Одной из основных причин ошибки ora-00942 является то, что у пользователя недостаточно прав для доступа к рассматриваемой таблице. Вы можете проверить это, выполнив два запроса.

— список привилегий объекта для пользователя или роли

Эти двое скажут вам, имеет ли данный пользователь правильные привилегии для запуска команды. Если пользователь имеет правильные привилегии, переходите к следующему. Если пользователь не имеет правильных привилегий, предоставьте их им или попросите администратора БД сделать это.

Ошибка ora-00942 также может возникнуть, если пользователь используемой схемы имеет привилегии INSERT, но не привилегии SELECT. Опять же, проверьте уровень привилегий и добавьте SELECT в список или попросите администратора БД сделать это. Очевидно, что каждой схеме должна быть предоставлена ​​определенная привилегия SELECT, в противном случае вы все равно увидите ошибку ora-00942.

Таблица или представление на самом деле не существуют

Причиной ошибки ora-00942 может быть неправильный синтаксис запроса или отсутствие таблицы. Хотя это может показаться логичным для начала, я уверен, что привилегия пользователя является причиной ошибки номер один. Таблица, которой там нет или используется неверный синтаксис таблицы, занимает второе место.

Чтобы проверить, существует ли таблица, сначала проверьте синтаксис запроса. Если синтаксис правильный, запустите этот запрос.

В последней строке вставьте фактическое имя таблицы, где вы видите «YOUR_TABLE_NAME». Это должно точно сказать вам, существует ли таблица, к которой вы пытаетесь обратиться, или нет. Если он возвращается без таблицы, запрашиваемая вами таблица не существует в схеме или базе данных.

Если в используемой вами системе есть меню «Таблицы», вы можете вручную проверить таблицу, если хотите, но вышеуказанный запрос выполняет свою работу.

Таблица или представление находятся в другой схеме

Если у пользователя есть права, и таблица существует, но вы все еще видите ошибку ora-00942, скорее всего, это связано со схемой. Если вы управляете несколькими схемами, легко выполнить запрос к схеме, которая не принадлежит вам. Когда вы заняты и против этого, это простая ошибка, чтобы сделать.

Проверьте схему вручную, если можно или добавьте имя схемы в строке ОТ вашего запроса. Если у вас нет правильных привилегий для новой схемы, вы снова увидите ошибку ora-00942. Вернитесь к первому исправлению привилегий пользователя и проверьте соответствующую схему или попросите своего администратора базы данных сделать это за вас.

Как упомянуто выше, я проконсультировался с моим приятелем по DBA Oracle для этой работы, так что вся заслуга ему в тяжелой работе. Если вы обнаружите здесь какие-либо ошибки или упущения, они одни. Дайте мне знать в разделе комментариев, если я что-то пропустил или ошибся, и я исправлю это.

Если вам известен какой-либо другой способ исправить ошибку ora-00942, сообщите нам об этом ниже!

Источники:

https://ru. fluffyfables. com/914324-article-ora-01036-illegal-variable-name

https://milestone-club. ru/kak-ispravit-oshibku-ora-00942

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: