OceanBaseデータベースは、更新や削除などのDMLステートメント操作に対して自動的にカーソルを設定し、その作業領域を作成します。これらのシステムによって暗黙に作成されるカーソルは、インラインカーソルと呼ばれ、その名前はSQLです。これはOceanBaseシステムが定義したものです。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
インラインカーソルに対する操作(定義、オープン、値の取得、クローズなど)は、OceanBaseシステムが自動的に行うため、ユーザーによる処理は不要です。ユーザーはインラインカーソルの関連プロパティを通じて、対応する操作を実行できます。インラインカーソルの作業領域に格納されるデータは、ユーザーが定義した明示的なカーソルとは無関係であり、最近処理されたSQLステートメントに含まれるデータです。
インラインカーソルのプロパティは以下の通りです:
SQL%FOUNDブール型プロパティで、最後のレコード読み取りが成功して返された場合、値はTRUEになります。SQL%NOTFOUNDブール型プロパティで、%FOUNDとは逆の意味を持ちます。SQL%ROWCOUNT数値型プロパティで、カーソルから読み取られたレコード数を返します。SQL%ISOPENブール型プロパティで、常にFALSEを返します。SQLコマンドの実行が完了すると、即座にインラインカーソルがクローズされます。
次の例では、emp テーブル内の特定部門のすべての従業員を削除します。その部門に従業員がいない場合は、dept テーブルからその部門も削除します。
obclient> CREATE TABLE dept(
deptno NUMBER(2,0),
dname VARCHAR(15),
location VARCHAR(20),
CONSTRAINT pk_dept PRIMARY KEY(deptno)
);
Query OK, 0 rows affected
obclient> CREATE TABLE emp(
empno NUMBER(4,0),
empname VARCHAR(10),
job VARCHAR(10),
mgr NUMBER(4,0),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2,0),
CONSTRAINT PK_emp PRIMARY KEY (empno)
);
Query OK, 0 rows affected
obclient> INSERT INTO dept VALUES (10,'ACCOUNTING','Los Angeles');
Query OK, 1 row affected
obclient> INSERT INTO emp VALUES (1839,'KING','PRESIDENT',null, '1981-11-17',5000,null,10);
Query OK, 1 row affected
obclient> DECLARE
v_dept_id emp.deptno%TYPE := 10;
BEGIN
DELETE FROM emp WHERE deptno=v_dept_id;
IF SQL%NOTFOUND THEN
DELETE FROM dept WHERE deptno=v_dept_id;
END IF;
END;
/
Query OK, 0 rows affected