1

関数から複数の値を取得したいのですが、私のコードは次のとおりです。

CREATE OR REPLACE TYPE user_data_type AS OBJECT(val1 NUMBER(15), val2 NUMBER(15))


CREATE OR REPLACE FUNCTION GET_EMPLOYEE_AND_USER(in_login IN fnd_user.user_name%TYPE)
RETURN user_data_type AS
out_var user_data_type;

CURSOR buffer_cur IS
SELECT f.user_id, f.employee_id FROM Fnd_User f WHERE f.user_name=in_login;
BEGIN 
OPEN buffer_cur;
FETCH buffer_cur INTO out_var;

CLOSE buffer_cur;
RETURN out_var;
END GET_EMPLOYEE_AND_USER;

私が実行すると:

select * from table(get_employee_and_user('user1'))

それは言う: パッケージまたは関数 get_employee_and_user が無効な状態
にある 残念ながら、行タイプを返そうとすると、または記録しようとすると、上記のエラーが表示されます。

4

1 に答える 1

3

これらの値をオブジェクト タイプのフィールドに選択する必要があります。以下をご覧ください。

CREATE OR REPLACE TYPE user_data_type AS OBJECT(val1 NUMBER(15), val2 NUMBER(15));
/

CREATE OR REPLACE FUNCTION GET_EMPLOYEE_AND_USER(in_login IN fnd_user.user_name%TYPE)
  RETURN user_data_type AS

  out_var user_data_type;

  CURSOR buffer_cur IS
    SELECT f.user_id, f.employee_id FROM Fnd_User f WHERE f.user_name = in_login;

BEGIN 
  OPEN buffer_cur;
  FETCH buffer_cur INTO out_var.val1, out_var.val2;

  CLOSE buffer_cur;
  RETURN out_var;
END GET_EMPLOYEE_AND_USER;
于 2013-11-05T11:25:02.673 に答える