- - PR -
カーソルについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-12-19 16:10
ORACLE9iでストアド内でカーソルを使いたいのですが
実装方法がわかりません。 内容は、 1.カーソルのSELECT文のwhere句のカラム名が動的でストアドの パラメタで動的に変わる。 2.カーソルで読み込んだレコードをUPDATEまたはDELETEしたい。 (where current of)を使うのはわかります。 カーソルの宣言でREF CURSORを使いたいのですが、更新系に使えない みたいです。 以上、漠然とした質問で申し訳ありませんがよろしくお願いします。 |
|
投稿日時: 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