1 DECLARE
2      invalidsno    EXCEPTION;
3       sid VARCHAR2(10);
4      pname VARCHAR2(10);
5     BEGIN
6       sid:='&sss';               --这里如果直接写'07001'则通过
7       IF sid NOT IN ('07001','07002','07003') THEN
8         RAISE invalidsno;
9       ELSE 
10           select sname into pname from student
11            where sno=sid;
12           DBMS_OUTPUT.PUT_LINE(sid||'的姓名是'|| pname);
13       END IF;
14    EXCEPTION
15     WHEN invalidsno THEN
16        DBMS_OUTPUT.PUT_LINE('无法识别该学生');
17   end;输入 sss 的值:  07002
原值    7:        sid:='&sss';
新值    7:        sid:='07002';
DECLARE
*
第 1 行出现错误:
ORA-01403: 未找到数据
ORA-06512: 在 line 11????怎会这样?11行有错吗,

解决方案 »

  1.   

    你这是在sqlplu里执行,&在sqlplus里是个转换符号。 有个开关可以设置的,我去找找
      

  2.   

    set define off11            where sno=sid; 你输入的07002 在student 表里没有这条数据,oracle会抛出一个NO_DATA_FOUND的异常的,所以
      

  3.   

    07001、07002在表中都有对应数据,关键是sid的问题
      

  4.   

    1 DECLARE 
    2      invalidsno    EXCEPTION; 
    3      sid VARCHAR2(10); 
    4      pname VARCHAR2(10); 
    5    BEGIN 
    6      sid:='&sss';              --这里如果直接写'07001'则通过 
    7      IF sid NOT IN ('07001','07002','07003') THEN 
    8        RAISE invalidsno; 
    9      ELSE 
    10          select sname into pname from student 
    11            where sno=sid; 
    12          DBMS_OUTPUT.PUT_LINE(sid||'的姓名是'|| pname); 
    13      END IF; 
    14    EXCEPTION 
    15    WHEN invalidsno THEN 
    16        DBMS_OUTPUT.PUT_LINE('无法识别该学生'); 
    --加上下面的2句,你就知道了
      WHEN no_data_found then
       dbms_output.put_line('没找到你输入的sid');
    17  end;