Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Изберете от тип данни на запис

Типът данни на запис е тип данни PL/SQL. SQL не знае за това. Вероятно затова получавате грешка. Вижте този пример:

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

Грешката в SQL, за която имах предвид. Можете обаче да я извикате от 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.

Ако искате да използвате функцията в SQL, тогава можете да създадете SQL обектен тип. Имайте предвид, че извикването на вашата функция директно от C# изглежда много по-предпочитано, отколкото да настоявате да използвате SQL за това. Но само за протокола:

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.

Поздрави, Роб.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция CHR() в Oracle

  2. Как да получите броя на елементите в JSON масив, съхранен като CLOB с Oracle 12c?

  3. Метод за събиране:ПРЕДИШНИ И СЛЕДВАЩИ функции в базата данни на Oracle

  4. Как да генерирате пакет API за таблица в Oracle SQL Developer?

  5. Попълване на елемент от дърво с група записи във форми на Oracle