Oracle顯式遊標小例子

來源:互聯網
上載者:User

1:遊標執行個體,顯示出姓名和部門

DECLARE

     name VARCHAR2(50);

     department_name varchar(20);   --定義兩個變數來存放employees表和departments表中的內容

     CURSOR emp_cur IS   --定義遊標emp_cur

              SELECT name, department_name

              FROM employees e, departments d

              WHERE e.department_id = d.department_id;   --選出所有員工的姓名和所在部門

     BEGIN

           OPEN emp_cur;    --開啟遊標

           LOOP

                  FETCH  emp_cur INTO name, department_name;   --每次將一行資料放入到變數中,遊標後移

                  EXIT  WHEN emp_cur%NOTFOUND;   --當遊標取不到資料時退出迴圈

                  dbms_output.put_line(name || ' 在 ' || department_name);   --輸出姓名和所在部門

          END LOOP;

          CLOSE emp_cur;

  END;

 


2:第二個例子,

   公司上市,決定給員工提高薪資,入職時間沒超過1年漲100,1000元封頂

   DECLARE

      hire_date DATE;      --定義2個變數存放employee表中的內容

      e_id  NUMBER;

      CURSOR emp_cur IS       --定義遊標emp_cur

          SELECT id, hire_date

           FROM employees;        --選出所有員工的姓名和入職時間

       BEGIN

            OPEN emp_cur;    --開啟遊標

           LOOP

                FETCH emp_cur INTO e_id, hire_date;    --每次將一行資料存入變數中,遊標後移

                EXIT WHEN emp_cur % NOTFOUND;

                IF 100*(2010 - to_char(hire_date, 'yyyy')) < 1000 THEN      --判斷年限和工資的關係

                   UPDATE salary


                    SET salaryvalue = salaryvalue + 100*(2010 - to_char(hire_date, 'yyyy'))

                    WHERE employeeid = e_id;

               ELSE

                    UPDATE salary

                    SET salaryvalue = salaryvalue + 1000;

                    WHERE employeeid = e_id;

                END IF;

              END LOOP;

      END;

3:使用迴圈遊標簡化遊標的讀取

    文法:

         FOR  <類型>  IN  <遊標名>  LOOP

         --操作各行資料

        END LOOP;

      例子:

     DECLARE

           TYPE  employee_record IS  RECORD    --定義一個RECORD類型的變數,裡麵包含name和department_name兩個變數

             (

                  name VARCHAR2(50),

                  department_name varchar(20)

             );

             CURSOR  emp_cur IS

                      SELECT name, department_name

                     FROM employee e, departments d

                     WHERE e.department_id = d.department_id;

            BEGIN

                 FOR  employee_record IN emp_cur LOOP

                 dbms_output.put_line

                     (employee_record.name || ' 在 ' || employee_record.department_name);

                 END LOOP;

            END;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.