Слишком много строк, но выбрана только одна
У меня есть эта процедура, которая просто удаляет строку на основе поля столбца с именем AppID
, Эта процедура получает значение из другого столбца с именем AppNbr
на основе этих строк AppID
колонка. Процедура терпит неудачу с TOO_MANY_ROWS
исключение, когда он пытается SELECT
строка. Это PL/SQL:
DECLARE
lvnApplNbr NUMBER;
PROCEDURE deleteAppl(applId IN VARCHAR2) IS
BEGIN
BEGIN
SELECT ApplNbr -- Exception thrown here
INTO lvnApplNbr
FROM Appl
WHERE ApplID = applId;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
-- ... Delete it after some logic
END; -- End Procedure
BEGIN
...
deleteAppl('571E00BA-70E6-4523-BEAC-4568C3DD1A7D');
...
END;
TOO_MANY_ROWS
исключение выдается, когда оно SELECT INTO
s. Я понятия не имею, почему он выдает эту ошибку, потому что если я просто запросить это:
SELECT ApplNbr FROM Appl WHERE ApplId = '571E00BA-70E6-4523-BEAC-4568C3DD1A7D';
Только один ряд вернется с правильным ApplId
,
Что здесь происходит?
1 ответ
Просто используйте псевдоним для связанной таблицы (Appl
):
PROCEDURE deleteAppl(applId IN VARCHAR2) IS
.....
.....
SELECT ApplNbr
INTO lvnApplNbr
FROM Appl a
WHERE a.ApplID = applId;
......
или измените имя вашего параметра (applId
) к другому имени, такому как i_applId
:
PROCEDURE deleteAppl(i_applId IN VARCHAR2) IS
.....
.....
SELECT ApplNbr
INTO lvnApplNbr
FROM Appl
WHERE ApplID = i_applId;
......
Потому что в вашем случае множественное соответствие воспринимается, если ваш parameter's name
а также column name
идентичны