Oracle游標使用大全(2)

發表于:2013-06-04來源:Csdn作者:scorpio3k點擊數: 標簽:oracle
END; 游標FOR循環 在大多數時候我們在設計程序的時候都遵循下面的步驟: 1、打開游標 2、開始循環 3、從游標中取值 那一行被返回 5、處理 6、關閉循環

  END;

  游標FOR循環

  在大多數時候我們在設計程序的時候都遵循下面的步驟:

  1、打開游標

  2、開始循環

  3、從游標中取值

  那一行被返回

  5、處理

  6、關閉循環

  7、關閉游標

  可以簡單的把這一類代碼稱為游標用于循環。但還有一種循環與這種類型不相同,這就是FOR循環,用于FOR循環的游標按照正常的聲明方式聲明,它的優點在于不需要顯式的打開、關閉、取數據,測試數據的存在、定義存放數據的變量等等。游標FOR循環的語法如下:

  FOR record_name IN

  (corsor_name[(parameter[,parameter]...)]

  | (query_difinition)

  LOOP

  statements

  END LOOP;

  下面我們用for循環重寫上面的例子:

  DECALRE

  CURSOR c_dept IS SELECT deptno,dname FROM dept ORDER BY deptno;

  CURSOR c_emp (p_dept VARACHAR2) IS

  SELECT ename,salary

  FROM emp

  WHERE deptno=p_dept

  ORDER BY ename

  v_tot_salary EMP.SALARY%TYPE;

  BEGIN

  FOR r_dept IN c_dept LOOP

  DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname);

  v_tot_salary:=0;

  FOR r_emp IN c_emp(r_dept.deptno) LOOP

  DBMS_OUTPUT.PUT_LINE('Name:' || v_ename || 'salary:' || v_salary);

  v_tot_salary:=v_tot_salary+v_salary;

  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary);

  END LOOP;

  END;

  在游標FOR循環中使用查詢

  在游標FOR循環中可以定義查詢,由于沒有顯式聲明所以游標沒有名字,記錄名通過游標查詢來定義。

  DECALRE

  v_tot_salary EMP.SALARY%TYPE;

  BEGIN

  FOR r_dept IN (SELECT deptno,dname FROM dept ORDER BY deptno) LOOP

  DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname);

  v_tot_salary:=0;

  FOR r_emp IN (SELECT ename,salary

  FROM emp

  WHERE deptno=p_dept

  ORDER BY ename) LOOP

  DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary);

  v_tot_salary:=v_tot_salary+v_salary;

  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary);

  END LOOP;

  END;

  游標中的子查詢

  語法如下:

  CURSOR C1 IS SELECT * FROM emp

  WHERE deptno NOT IN (SELECT deptno

  FROM dept

  WHERE dname!='ACCOUNTING');

  可以看出與SQL中的子查詢沒有什么區別。

原文轉自:http://blog.csdn.net/scorpio3k/article/details/4098765

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97