declare
  v_no varchar2(10);
  v_name varchar2(10);
  cursor cursor1 is
     select name from table1 where no = v_no;
begin
   v_no := '001';
   open cursor;
   loop
      fetch cursor1 into v_name;
      exit when cursor1%NOTFOUND;
      .....
   end loop;
end;上面的参数v_no更本不起作用,选出来的东西是表中的所有记录。
请问是什么问题呢???
oracle版本是8.0.5
谢谢

解决方案 »

  1.   

    Oracle8i是起作用的,
    8.0.5没有试过
      

  2.   

    可以,以下一个例子
    v_dep classes.detpartment%type;
    v_course classes.course%type;
    cursor c_classes is
    select * from classes
    where department=v_dep 
    and course=v_course;
    ...........
      

  3.   

    好像还是不行,参数始终不起作用,fetch出来的是表中的全部记录
      

  4.   

    open cursor;
    这句应该是open cursor1吧
      

  5.   

    DECLARE
    CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno;
    CURSOR c_emp (p_dept VARCHAR2) IS
    SELECT ename, salary
    FROM emp
    WHERE deptno = p_dept
    ORDER BY ename;
    r_dept DEPT%ROWTYPE;
    v_ename EMP.ENAME%TYPE;
    v_salary EMP.SALARY%TYPE;
    v_tot_salary NUMBER (10,2);
    BEGIN
    OPEN c_dept;
    LOOP
    FETCH c_dept INTO r_dept;
    EXIT WHEN c_dept%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE ('Department : ' || r_dept.deptno
    || ' - '
    || r_dept.dname);
    v_tot_salary := 0;
    OPEN c_emp (r_dept.deptno);
    LOOP
    FETCH c_emp INTO v_ename, v_salary;
    EXIT WHEN c_emp%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE ('Name: ' ||v_ename || '
    Salary:'
    ||v_salary);
    v_tot_salary := v_tot_salary + v_salary;
    END LOOP;
    CLOSE c_emp;
    DBMS_OUTPUT.PUT_LINE ('Total Salary for Dept: ' || v_
    tot_salary);
    END LOOP;
    CLOSE c_dept;
    END;
    /
      

  6.   


    SQL> select id from test;ID
    -------------------------
    001
    002SQL> set serveroutput on
    SQL>  declare
      2      v_no varchar2(25);
      3      v_name varchar2(25);
      4      cursor cursor1 is
      5         select id from test where id = v_no;
      6    begin
      7       v_no := '001';
      8       open cursor1;
      9       loop
     10          exit when cursor1%NOTFOUND;
     11          fetch cursor1 into v_name;
     12          dbms_output.put_line(v_name);
     13          
     14       end loop;
     15    end;
     16  /
    001
    001PL/SQL 过程已成功完成。