1

PL/SQLをレコードタイプで複数の値を返す方法を知りたいのですが。

以下は私のサンプルコードです:-

CREATE OR REPLACE FUNCTION "FN_TESTING"
(
  TESTING1 IN VARCHAR2
) RETURN TEST4_TEST as

 TEST2 TEST4_TEST%ROWTYPE; 

CURSOR TEST1 IS 
 SELECT '1','2' FROM DUAL;

BEGIN 
 OPEN TEST1;
  FETCH TEST1
    INTO TEST2;
  CLOSE TEST1;

 RETURN TEST2;
END FN_TESTING;

TEST4_TEST関数をチェックします。宣言する必要があるという警告メッセージが表示されます。

この機能の何が問題なのかわかりますか?そして、私はこれについてどのように宣言しますTEST4_TESTか?

4

3 に答える 3

0

TEST4_TEST は TYPE Record の変数と考えてください。この変数は、NUMBER、VARCHAR、DATE と同じです。唯一の違いは、これらはすでに Oracle によって定義されていますが、コレクションとレコードの場合は独自に定義する必要があることです。あなたの例によると、2つの数値を持つレコードを返したいようです。次のように定義する必要があります

CREATE OR REPLACE PACKAGE TEST4_TEST1
AS 
TYPE TEST4_TEST Is record
(
COL1 INTEGER,
COL2 INTEGER
);
END;

CREATE OR REPLACE FUNCTION FN_TESTING (testing1 IN VARCHAR2)
   RETURN TEST4_TEST1.test4_test
AS
 test3 TEST4_TEST1.test4_test;


   CURSOR test2
   IS
      SELECT '1', '2' FROM DUAL;
A
BEGIN
   OPEN test2;
   FETCH test2 INTO test3;
   CLOSE test2;
   RETURN test3;
END fn_testing;
于 2014-07-27T22:58:45.137 に答える
0

これも試してください:

declare TYPE t_deptrec IS RECORD
(
   name dept.dname%type,
   location dept.loc%type
);

CURSOR c_emp is

select ename,deptno from emp;
r_dept t_deptrec;

function getDept(p_deptno dept.deptno%type) return t_deptrec is
r_dept t_deptrec;

begin
   select dname,loc into r_dept
   from dept where deptno = p_deptno;

   return r_dept;
end;

BEGIN
   for r_emp in c_emp
   loop

      r_dept := getDept(r_emp.deptno);
      dbms_output.put_line(r_emp.ename || ',' || r_dept.name || ',' || r_dept.location);

   end loop;
END;
于 2013-02-07T06:48:13.257 に答える