PL / SQL错误:精确提取返回的请求行数超过ORA-06512:

时间:2013-11-27 09:45:51

标签: sql oracle plsql

我正在尝试从学生表中输入一个学生ID来判断他们是否通过了module_grades表,但是当我输入学生ID时我会继续收到该错误,任何人都可以帮助,谢谢 这是我的代码:

set serverouput on
DECLARE
Student Students.Sid%type:='&sid';
decision MODULE_GRADES.MDECISION%type;
BEGIN
SELECT MDECISION INTO decision FROM MODULE_GRADES
WHERE Sid = Student;
IF
(decision = 'Pass')
Then
DBMS_OUTPUT.PUT_LINE('You got'||Decision||' congratulations');
END IF;
END;

1 个答案:

答案 0 :(得分:2)

您收到错误,因为SELECT INTO至少返回两行。在PL / SQL中SELECT INTO must return exactly one row,不多也不少。

使用SELECT INTO时,您应该通过保证唯一性的条件组合查询表 - 通常是主键。在您的情况下,您可能缺少过滤器,或者数据中存在异常。

如果您期望可能有多行的情况,您应该:

  • 使用循环:

    FOR cc IN (SELECT DECISION FROM MODULE_GRADES WHERE Sid = Student) LOOP
       -- do something
    END LOOP;
    
  • 或捕获异常

    BEGIN
       SELECT MDECISION INTO decision 
         FROM MODULE_GRADES
        WHERE Sid = Student; 
       -- do something
    EXCEPTION
       WHEN TOO_MANY_ROWS THEN
          -- do something else
    END;