所以我正在开发一个安装程序,安装程序连接到数据库并创建表并填充它们。除非我尝试将行添加到 certian 表中,否则这方面的每个方面都可以正常工作。
declare
retVal INTEGER;
rptID INTEGER;
catID INTEGER;
wsID INTEGER;
paramID INTEGER;
dtID INTEGER;
begin
select PK into catID from RPT_CATEGORY where KEYVALUE = 'ProductivityReportsCategory';
select PK into rptID from RPT_REPORT where KEYVALUE = 'ProductivitySummaryReport2';
select PK into wsID from RPT_WEBSVC where KEYVALUE = 'NotApplicable' and category_fk = catID;
填充数据库的选择语句如下所示:
select PK into wsID from RPT_WEBSVC where KEYVALUE = 'GetMachineNameList' and category_fk = catID;
paramID := RPT_CONFIGURATION.ADD_PARAMETER( rptID, wsID, dtID, 'Machine', 'parameters.GetProductivityDataSet3.inserterid', 4, NULL, NULL, NULL, 0, 0, 0, 'Y', 'Y', 'N', 'N', 'Y' );
还有 13 个这样的 select 语句(我不会添加它们,因为它们都很相似,唯一的区别是存储的值会进入表中。)
我的问题是,当我运行安装程序时,完成后我在日志中收到此错误:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 30
我想知道发生此错误的确切原因是什么,以及解决此错误的方法是什么?
我对该主题进行了一些研究,发现这是我搜索的共同主题:
1.代码有bug,开发者没有意识到你可以得到不止一行的返回;
2.数据被黑而不是使用API导致验证被破坏;
3.软件没问题,用户做的没问题,但是同时发生了两次并行更新,都看不到对方所做的未提交的更改-因此未正确验证。
我很肯定它不是#2,但我不太明白其他两个原因究竟意味着什么,或者如何解决它们。
非常感谢任何帮助或建议。
谢谢