- PR -

カーソルについて

1
投稿者投稿内容
もんた
常連さん
会議室デビュー日: 2005/05/19
投稿数: 20
投稿日時: 2007-12-19 16:10
ORACLE9iでストアド内でカーソルを使いたいのですが
実装方法がわかりません。

内容は、
1.カーソルのSELECT文のwhere句のカラム名が動的でストアドの
パラメタで動的に変わる。

2.カーソルで読み込んだレコードをUPDATEまたはDELETEしたい。
(where current of)を使うのはわかります。

カーソルの宣言でREF CURSORを使いたいのですが、更新系に使えない
みたいです。


以上、漠然とした質問で申し訳ありませんがよろしくお願いします。
ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2007-12-21 21:52
ストアドプロシージャではありませんが
CREATE TABLE TBL1 ( A INT PRIMARY KEY, B VARCHAR2(16) );

DECLARE
TYPE REF_CURS_TYPE IS REF CURSOR;
REF_CUR REF_CURS_TYPE;
SQLSTR VARCHAR2(2000);
REC TBL1%ROWTYPE;
ID ROWID;
BEGIN
SQLSTR := 'SELECT A, B,ROWID FROM TBL1 FOR UPDATE';

OPEN REF_CUR FOR SQLSTR;
LOOP
FETCH REF_CUR INTO REC.A,REC.B,ID;
EXIT WHEN REF_CUR%NOTFOUND;
IF REC.A >= 5 THEN
UPDATE TBL1 SET B = 'X' WHERE ROWID = ID;
END IF;
END LOOP;
CLOSE REF_CUR;
END;
/

のようにすればCURRENT OFを使わなくとも読み込んだ行を更新できます。
後は、動的にカーソルの元になるSQL文を作成することで対応できませんか。
1

スキルアップ/キャリアアップ(JOB@IT)