2016-06-17 13 views
0

レコードのデータ型を返す関数から返される値はどのようにして確認できますか? ここで私は、私は両方のケースで、無効な型エラーを取得していますoracleでレコードを返す関数を照会する

select * from table(function1(123)); 

select function1(123) from dual; 

を試してみました

TYPE employee_record_info IS RECORD (
employee_id NUMBER, 
employee_name VARCHAR2(100), 
manager_id NUMBER, 
location VARCHAR2(100) 
); 

FUNCTION function1(in_employee_id NUMBER) RETURN employee_record_info AS 
    l_record employee_record_info; 
    BEGIN 
     SELECT employee_id, employee_name, manager_id, location 
     INTO 
     l_record 
     FROM all_employees where employee_id = in_employee_id;  
    RETURN l_record; 
    END function1; 

機能はありますか?これらの値を取得する方法はありますか? 私の機能をテストするために必要なのはこれだけです。これはどのコードでも使用するためのものではありません。

機能が返却されている場合は、何か助けてください。

ありがとうございました。

+2

あなたの関数の定義を表示する –

+0

は質問を編集しました。 – ravi

答えて

4

コードはpl/sql用です.SQLを使用して選択することはできません。

SQL> create or replace type emp_rec_typ as object(
employee_id NUMBER, 
employee_name VARCHAR2(100), 
manager_id NUMBER, 
location VARCHAR2(100) 
); 
Type created. 
SQL> create or replace type emp_tab_typ as table of emp_rec_typ; 
Type created. 
SQL> create or replace function get_emps 
return emp_tab_typ 
as 
    emps emp_tab_typ := emp_tab_typ(); 
begin 
    select emp_rec_typ(x.employee_id, x.employee_name, x.manager_id, x.location) 
    bulk collect into emps 
    from (
     select 1 as employee_id, 'Joe Blow' as employee_name, 1 as manager_id, 'Some Place' as location from dual 
     union all 
     select 2 as employee_id, 'Jane Doe' as employee_name, 1 as manager_id, 'Some Other Place' as location from dual 
     union all 
     select 3 as employee_id, 'Fred Smith' as employee_name, 2 as manager_id, 'Some Strange Place' as location from dual 
    ) x; 

    return emps; 

end; 
Function created. 
SQL> select * from table(get_emps); 

EMPLOYEE_ID EMPLOYEE_NAME MANAGER_ID LOCATION 
1 'Joe Blow' 1 'Some Place' 
2 'Jane Doe' 1 'Some Other Place' 
3 'Fred Smith' 2 'Some Strange Place' 
関連する問題