• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 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

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>