dポイントプレゼントキャンペーン実施中!

もしご存知の方がいればお教えください。

ORACLE PL/SQLで
CURSOR cur_a AS
SELECT a FROM TBLA
とカーソルを宣言し
そのカーソルを他のカーソルで
使用することは可能でしょうか?
以下のような感じで
CURSOR cur_B AS
SELECT b FROM TBLB,cur_a

ご存知の方が居たら
どのようなSELECT文を
書けばよいかお教えください

よろしくお願いいたします

A 回答 (1件)

カーソルにINのパラメータが設定できるので、INで受け取った値をカーソル内のWhere句に指定すれば検索可能です。



昔、こんな感じでやりました。
以下のサンプルはscottユーザで流してみてください。

set serveroutput on size 1000000
DECLARE
CURSOR emp_cur
IS
SELECT
empno,
deptno
FROM emp
;
emp_rec emp_cur%ROWTYPE;

CURSOR dept_cur
(
in_deptno IN NUMBER
)
IS
SELECT
deptno,
dname
FROM dept
WHERE deptno = in_deptno
;
dept_rec dept_cur%ROWTYPE;

BEGIN
OPEN emp_cur;
LOOP
FETCH emp_cur INTO emp_rec;
EXIT WHEN emp_cur%NOTFOUND;

OPEN dept_cur
(
emp_rec.deptno
);

FETCH dept_cur INTO dept_rec;
IF dept_cur%NOTFOUND
THEN
DBMS_OUTPUT.PUT_LINE('dept not found : ' || emp_rec.deptno);
ELSE
DBMS_OUTPUT.PUT_LINE(emp_rec.empno);
DBMS_OUTPUT.PUT_LINE(dept_rec.dname);
END IF;
CLOSE dept_cur;

END LOOP;
CLOSE emp_cur;


EXCEPTION

WHEN OTHERS THEN
DECLARE
ERROR_CODE NUMBER := SQLCODE;
ERROR_MSG VARCHAR2(300) := SQLERRM;
BEGIN
DBMS_OUTPUT.PUT_LINE('*** ORA-ERROR IN THE EXCEPTION ***');
DBMS_OUTPUT.PUT_LINE('ERROR CODE : ' || TO_CHAR(ERROR_CODE));
DBMS_OUTPUT.PUT_LINE('ERROR MSG : ' || ERROR_MSG);
END;

END;
/
    • good
    • 0
この回答へのお礼

丁寧な解説ありがとうございます

ためしてみます

ありがとうございました

お礼日時:2008/07/01 22:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す