Oracle游標宣告

2019-10-16 22:06:03

這篇文章中將演示如何在Oracle / PLSQL中宣告游標的語法和範例。

游標是在PLSQL程式碼的宣告部分中定義的SELECT語句。下面來看看三種不同的語法來宣告游標。

1. 沒有引數的游標(最簡單)

在沒有任何引數的情況下宣告游標是最簡單的游標。

語法

Oracle / PLSQL中沒有引數的游標的語法是:

CURSOR cursor_name
IS
  SELECT_statement;

範例

例如,可以像下面那樣定義一個名為c1的游標。

CURSOR c1
IS
  SELECT course_number
  FROM courses_tbl
  WHERE course_name = name_in;

該游標的結果集是所有course_name,其course_namename_in變數匹配。

下面是使用這個游標的函式。

CREATE OR REPLACE Function FindCourse
   ( name_in IN varchar2 )
   RETURN number
IS
   cnumber number;

   CURSOR c1
   IS
     SELECT course_number
     FROM courses_tbl
     WHERE course_name = name_in;

BEGIN

   OPEN c1;
   FETCH c1 INTO cnumber;

   if c1%notfound then
      cnumber := 9999;
   end if;

   CLOSE c1;

RETURN cnumber;

END;

帶引數游標

下面來看更加複雜一點的應用,使用引數宣告游標。

語法

Oracle/PLSQL中具有引數的游標的語法是:

CURSOR cursor_name (parameter_list)
IS
  SELECT_statement;

範例

例如,可以定義一個名為c2的游標,如下所示。

CURSOR c2 (subject_id_in IN varchar2)
IS
  SELECT course_number
  FROM courses_tbl
  WHERE subject_id = subject_id_in;

該游標的結果集是所有course_numbers,其subject_id與通過引數傳遞給游標的subject_id相匹配。

帶有return子句的游標

最後,可以用return子句宣告一個游標。

語法
Oracle / PLSQL中帶有return子句的游標的語法是:

CURSOR cursor_name
RETURN field%ROWTYPE
IS
   SELECT_statement;

範例

例如,可以像下面那樣定義一個名為c3的游標。

CURSOR c3
RETURN courses_tbl%ROWTYPE
IS
   SELECT *
   FROM courses_tbl
   WHERE subject = 'Mathematics';

這個游標的結果集是來自course_tbl的科目是數學的所有列。