Oracle“SQL错误:索引:: 1处缺少IN或OUT参数”

时间:2009-11-17 23:56:11

标签: oracle oracle-sqldeveloper

我有一个类似于以下内容的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;

据说最后一个语句是对绑定变量的有效使用,但是当我尝试运行脚本时,我在最后一行得到了这个:

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

我不知道如何继续前进,因为我对甲骨文并不是特别熟练。

5 个答案:

答案 0 :(得分:14)

当我在Java代码中使用JDBC时,我遇到了类似的错误。

根据this website(第二个awnser),它建议您尝试使用缺少的参数执行查询。

例如:

exec SomeStoredProcedureThatReturnsASite( :L_kSite );

您尝试在没有最后一个参数的情况下执行查询。

也许在SQLPlus它没有相同的要求,所以它可能是运气在那里工作。

答案 1 :(得分:5)

基于上面留下的评论,我在sqlplus而不是SQL Developer下运行了这个,并且UPDATE语句完美运行,让我相信这是SQL Developer中的一个问题,特别是因为没有返回ORA错误号。感谢您带领我朝着正确的方向前进。

答案 2 :(得分:1)

我认为它与jdbc有关。

当我遇到这样的情况时,我遇到了类似的问题(缺少参数):

a = :namedparameter and b = :namedparameter

没关系,我喜欢这个:

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

所以这是命名参数的问题。 我认为命名参数处理存在一个错误,看起来如果只有第一个参数得到正确的值,第二个参数不是由驱动程序类设置的。也许它不是一个bug,只是我不知道什么,但无论如何我猜这是SQL dev和为你运行的sqlplus之间差异的原因,因为据我所知SQL开发人员使用jdbc驱动程序。

答案 3 :(得分:0)

我收到了同样的错误,发现原因是错误或缺少外键。 (使用JDBC)

答案 4 :(得分:0)

我有这个错误,因为包含问号的列的别名中有一些拼写错误(例如,contract.reference是合约?ref)