Oracle "Ошибка SQL: отсутствует параметр IN или OUT в index :: 1" - PullRequest
6 голосов
/ 18 ноября 2009

У меня есть скрипт Oracle, который выглядит следующим образом:

variable L_kSite number;
variable L_kPage number;
exec SomeStoredProcedureThatReturnsASite( :L_kSite );
exec SomeStoredProcedureThatAddsAPageToTheSite( :L_kSite, :L_kPage );
update SiteToPageLinkingTable 
set HomePage = 1 
where kSite = :L_kSite and kPage = :L_kPage;

Предположительно, последний оператор является допустимым использованием переменной bind, но когда я пытаюсь запустить скрипт, я получаю это в последней строке:

SQL Error: Missing IN or OUT parameter at index:: 1

Я не уверен, что делать дальше, потому что я не особенно опытен в Oracle.

Ответы [ 5 ]

14 голосов
/ 08 июня 2011

У меня была похожая ошибка на моей стороне, когда я использовал JDBC в коде Java.

В соответствии с на этом веб-сайте (второй awnser) предполагается, что вы пытаетесь выполнить запрос с отсутствующим параметром.

Например:

exec SomeStoredProcedureThatReturnsASite( :L_kSite );

Вы пытаетесь выполнить запрос без последнего параметра.

Может быть, в SQLPlus к нему не предъявляются те же требования, поэтому, возможно, ему повезло, что он работал там.

5 голосов
/ 18 ноября 2009

Основываясь на комментариях, оставленных выше, я запустил это под sqlplus вместо SQL Developer, и оператор UPDATE работал отлично, оставляя меня верить, что это проблема в SQL Developer, в частности, поскольку не было возвращено число ошибок ORA. Спасибо, что привели меня в правильном направлении.

1 голос
/ 06 января 2012

Я думаю, что это связано с JDBC.

У меня похожая проблема (отсутствует параметр), когда у меня есть условие where, подобное этому:

a = :namedparameter and b = :namedparameter

Все нормально, когда у меня вот так:

a = :namedparameter and b = :namedparameter2  (the two param has the same value)

Так что это проблема с именованными параметрами. Я думаю, что есть ошибка в обработке именованных параметров, похоже, что только первый параметр получает правильное значение, а второй не устанавливается классами драйверов. Возможно, это не ошибка, только я чего-то не знаю, но в любом случае, я думаю, в этом причина различия между разработчиком SQL и запущенным для вас sqlplus, потому что, насколько я знаю, разработчик SQL использует драйвер jdbc.

0 голосов
/ 31 октября 2016

У меня была эта ошибка из-за некоторой опечатки в псевдониме столбца, который содержал вопросительный знак (например, contract.reference в качестве контракта? Ref)

0 голосов
/ 15 августа 2014

Я получил ту же ошибку и обнаружил, что причина неправильная или отсутствует внешний ключ . (С использованием JDBC)

...