Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle:Chọn từ kiểu dữ liệu bản ghi

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đánh vần năm khi định dạng ngày trong Oracle

  2. Oracle xóa các hàng khỏi nhiều bảng

  3. Siêu dữ liệu liên quan đến các loại bản ghi cấp gói PL / SQL

  4. Các cụm đếm SQL Oracle

  5. Cách xử lý MAX () của một bảng trống là 0 thay vì NULL