Kiểu dữ liệu bản ghi là kiểu dữ liệu PL / SQL. SQL không biết về nó. Đó có thể là lý do tại sao bạn gặp lỗi. Xem ví dụ này:
SQL> create package mypkg
2 as
3 type myrec is record
4 ( id int
5 , name varchar2(10)
6 );
7 function f return myrec;
8 end mypkg;
9 /
Package created.
SQL> create package body mypkg
2 as
3 function f return myrec
4 is
5 r myrec;
6 begin
7 r.id := 1;
8 r.name := 'test';
9 return r;
10 end f;
11 end mypkg;
12 /
Package body created.
SQL> desc mypkg
FUNCTION F RETURNS RECORD
ID NUMBER(38) OUT
NAME VARCHAR2(10) OUT
SQL> select mypkg.f from dual
2 /
select mypkg.f from dual
*
ERROR at line 1:
ORA-00902: invalid datatype
Lỗi trong SQL mà tôi đang đề cập đến. Tuy nhiên, bạn có thể gọi nó từ PL / SQL:
SQL> declare
2 r mypkg.myrec;
3 begin
4 r := mypkg.f;
5 dbms_output.put_line(r.id);
6 dbms_output.put_line(r.name);
7 end;
8 /
1
test
PL/SQL procedure successfully completed.
Nếu bạn muốn sử dụng hàm trong SQL, thì bạn có thể tạo một kiểu đối tượng SQL. Lưu ý rằng việc gọi hàm của bạn trực tiếp từ C # trông sẽ thích hợp hơn so với việc khăng khăng sử dụng SQL để thực hiện việc này. Nhưng chỉ để ghi lại:
SQL> drop package mypkg
2 /
Package dropped.
SQL> create type myobj is object
2 ( id int
3 , name varchar2(10)
4 );
5 /
Type created.
SQL> create package mypkg
2 as
3 function f return myobj;
4 end mypkg;
5 /
Package created.
SQL> create package body mypkg
2 as
3 function f return myobj
4 is
5 begin
6 return myobj(1,'test');
7 end f;
8 end mypkg;
9 /
Package body created.
SQL> select mypkg.f from dual
2 /
F(ID, NAME)
--------------------------------------------------------------
MYOBJ(1, 'test')
1 row selected.
Trân trọng, Rob.