Итак, я работаю над установщиком, где установщик подключается к базе данных, создает таблицы и заполняет их.Каждый аспект этого работает правильно, за исключением случаев, когда я пытаюсь добавить строки в определенную таблицу.
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больше операторов выбора структурировано следующим образом (я не буду добавлять их, поскольку все они похожи, и единственное отличие - это сохраненные значения, которые будут помещены в таблицу.)
Моя проблема в том, что когда я запускаю установщик,я получаю эту ошибку в журналах после завершения:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 30
Что я хотел бы знать, какова причина возникновения этой ошибки и каковы способы ее устранения?
Я провел некоторое исследование по этой теме и обнаружил, что это общая тема моего поиска:
1. В коде есть ошибка, и разработчик не осознал, что вы можете получитьвозвращено более одного ряда;
2. Данные были взломаны, а не с помощью API, поэтому проверка была нарушена;
3.Программа в порядке, то, что сделал пользователь, было в порядке, но произошли два параллельных обновленияв то же время, и ни один из них не мог видеть незафиксированное изменение, которое сделал другой - следовательно, не подтверждено правильно.
Я уверен, что это не №2, но я не совсем понимаю, что именно означают другие 2 причины, или как их исправить.
Любая помощь или предложения приветствуются.
Спасибо