-1

私はemployeesという名前のテーブルを持っています..2つの関数を書きたいです.refcursorを使用して1番目の関数を使用してemployessテーブルからすべての行をフェッチしたい...そして結果は2番目の関数を通して表示されます。これらの2つの関数は1つのパッケージ

4

1 に答える 1

0

あなたの質問は、解決策を見つけるための努力や労力がほとんどないことを示しています。

Oracleのドキュメントを読むことから始めれば、非常に役に立ちます。

達成したいことの例として:

CREATE OR REPLACE 
PACKAGE ref_cur_package
AS
   FUNCTION get_emp
      RETURN SYS_REFCURSOR;

   PROCEDURE show_emp;
END ref_cur_package;



CREATE OR REPLACE
PACKAGE BODY ref_cur_package
AS
   FUNCTION get_emp
      RETURN SYS_REFCURSOR
   IS
      emp_rc SYS_REFCURSOR;
   BEGIN
      OPEN emp_rc
       FOR SELECT *
             FROM emp;

      RETURN emp_rc;
   END get_emp;

   PROCEDURE show_emp
   IS
      emp_rc  SYS_REFCURSOR;
      emp_row emp%ROWTYPE;
   BEGIN
      emp_rc := get_emp;

      LOOP
         FETCH emp_rc INTO emp_row;

         EXIT WHEN emp_rc%NOTFOUND;

         DBMS_OUTPUT.put_line('Employee: '||emp_row.firstname||' '||emp_row.lastname);
      END LOOP;

      CLOSE emp_rc;
   END show_emp;
END ref_cur_package;
/

出力を表示するには、 serveroutput を onに設定する必要があります。

また、問題が発生した場合に ref カーソルを強制的に閉じる例外ハンドラーを追加する必要がありますが、調査はあなたに任せます。

于 2012-07-17T14:05:57.993 に答える