sql >> データベース >  >> RDS >> Oracle

パッケージ定義内のOracleユーザー定義タイプ

    いいえ、許可されていません:

    SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS  -- spec
       -- PROCEDURE my_rpcedure (emp_id NUMBER);
       TYPE DTO_GRID AS OBJECT
       (
         ROWKEY    NVARCHAR2(200),
         COLUMNKEY NVARCHAR2(200),
         CELLVALUE NVARCHAR2(200),
         OLDVALUE  NVARCHAR2(200),
         TAG       NVARCHAR2(200)
       );
    END AF_CONTRACT;
    /
      2    3    4    5    6    7    8    9   10   11   12
    
    Warning: Package created with compilation errors.
    
    SQL> SQL> sho err
    Errors for PACKAGE AF_CONTRACT:
    
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    3/4      PLS-00540: object not supported in this context.
    SQL>
    

    PL / SQLプロシージャ間でデータを渡すだけの型を作成する場合は、PL /SQLRECORD構文を使用します。

    SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS  -- spec
       -- PROCEDURE my_rpcedure (emp_id NUMBER);
       TYPE DTO_GRID IS RECORD
       (
         ROWKEY    NVARCHAR2(200),
         COLUMNKEY NVARCHAR2(200),
         CELLVALUE NVARCHAR2(200),
         OLDVALUE  NVARCHAR2(200),
         TAG       NVARCHAR2(200)
       );
    END AF_CONTRACT;
    /
      2    3    4    5    6    7    8    9   10   11   12
    Package created.
    
    SQL>
    

    ただし、SQLステートメントで使用できるタイプ、つまりTABLE()への入力として使用できるタイプが必要な場合 関数-SQL型として作成する必要があります。 SQLとPL/SQLは2つの異なるエンジンを使用し、SQLタイプのみがSQLエンジンに表示されます。

    SQLタイプの必要性に関する私のアドバイスは、それ以降のバージョンのOracleには当てはまりません。確かに、11gR2および12cでは、SQLエンジンはTABLE()でPL/SQLテーブルを使用するPL/SQLパッケージのSQLをサポートします。 句。タイプはパッケージ仕様で宣言する必要があるため、SQLエンジンに公開されて表示されます。オラクルは、内部で宣言ごとにSQLタイプを生成します。これらのタイプの名前はSYS_PLSQL_で始まるため、これらのタイプを見つけることができます。 数値識別子が続きます。



    1. Oracle:pl-sqlを使用して、タブ区切りのテキストファイルからデータベースにレコードをインポートします。

    2. 1行目の''付近の不思議なMySQLエラー

    3. postgresql:md5メッセージダイジェストのデータ型?

    4. PG ::ConnectionBad:FATAL:ユーザーalphauserのパスワード認証に失敗しました