日期:2014-05-16 浏览次数:20443 次
DECLARE v_ename emp.ename%TYPE; BEGIN select ename into v_ename where empno=9527; --游标属性 IF SQL%NOTFOUND THEN --SQL%NOTFOUND 表示被影响的行数是否为0 DBMS_OUTPUT.PUT_LINE('not found!'); END IF; IF SQL%FOUND THEN --SQL%FOUND 表示被影响的行数是否大于等于1,与SQL%NOTFOUNT相对 DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||' rows influenced!');--SQL%ROWCOUNT表示被影响的行数,是个整数值。 END IF; IF SQL%ISOPEN THEN --SQL%ISOPEN oracle每执行一条sql语句就会自动关闭SQL游标,所以这里一直是false。 DBMS_OUTPUT.PUT_LINE('open!'); ELSE DBMS_OUTPUT.PUT_LINE('close!'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('exception: no date!'); END;
DECLARE v_emprow emp%ROWTYPE; CURSOR emp_cursor IS select * from emp;--没有into子句 CURSOR emp_name_cursor IS select ename from emp; BEGIN OPEN emp_cursor;-->打开游标 IF emp_cursor%ISOPEN THEN-->cursor_name%ISOPEN 判断游标是否打开; DBMS_OUTPUT.PUT_LINE('cursor is open!'); END IF; FETCH emp_cursor INTO v_emprow;-->将当前提取到的行的值存储到PL/SQL变量中; IF emp_cursor%FOUND THEN-->cursor_name%FOUND 和 cursor_name%NOTFOUND 判断最近一次的FETCH操作是否返回了一行数据; DBMS_OUTPUT.PUT_LINE('at first-->:'||'empno:'||v_emprow.empno||' ename:'||v_emprow.ename||' sal:'||v_emprow.sal); END IF; --使用基本循环来提取 LOOP EXIT WHEN emp_cursor%NOTFOUND; FETCH emp_cursor INTO v_emprow; DBMS_OUTPUT.PUT_LINE('at loop-->:'||'empno:'||v_emprow.empno||' ename:'||v_emprow.ename||' sal:'||v_emprow.sal); END LOOP; DBMS_OUTPUT.PUT_LINE(emp_cursor%ROWCOUNT||' rows have fetch!');-->cursor_name%ROWCOUNT 值为当前取回的总行数 --使用FOR循环来便捷的处理显式游标 FOR c_ename IN emp_name_cursor LOOP--使用for循环来处理游标会在FOR循环开始和结束时自动打开和关闭游标 DBMS_OUTPUT.PUT_LINE('at for-->:'||' ename: '||c_ename.ename); END LOOP; CLOSE emp_cursor;-->关闭游标 END;