我有一个类似于以下内容的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
我不知道如何继续前进,因为我对甲骨文并不是特别熟练。
答案 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)