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オブジェクトタイプを作成できます。これを行うためにSQLを使用することを主張するよりも、C#から直接関数を呼び出す方がはるかに好ましいように見えることに注意してください。しかし、記録のために:

    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. SQLServerにテーブルが存在しない場合にテーブルを作成する2つの方法

    2. MongoDBまたは他のドキュメント指向データベースシステムをいつ使用するのですか?

    3. SQL Server(T-SQL)で日付から月を抽出する3つの方法

    4. MySQLデータベースの名前を変更する方法