sql >> Databasteknik >  >> RDS >> Oracle

Oracle Användardefinierad typ inuti paketdefinition

Nej, det är inte tillåtet:

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>

Om du vill skapa en typ som bara skickar data mellan PL/SQL-procedurer använder du syntaxen PL/SQL RECORD:

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>

Men om du vill ha en typ som du kan använda i en SQL-sats - det vill säga som indata till en TABLE() funktion - du måste skapa den som en SQL-typ. SQL och PL/SQL använder två olika motorer, och endast SQL-typer är synliga för SQL-motorn.

Mitt råd om nödvändigheten av SQL-typer är inte längre sant för senare versioner av Oracle. Visst i 11gR2 och 12c kommer SQL-motorn att stödja SQL i PL/SQL-paket som använder PL/SQL-tabeller i en TABLE() klausul. Typerna måste deklareras i paketspecifikationen, därför offentliga och synliga för SQL-motorn. Under täcket genererar Oracle SQL-typer för varje deklaration. Du kan se dessa typer eftersom deras namn börjar med SYS_PLSQL_ följt av numeriska identifierare.



  1. Säkra dina Mongo-kluster med SSL

  2. Kapslade aggregatfunktioner

  3. Hur man designar ett hierarkiskt rollbaserat passersystem

  4. Hur skickar man ett värde från android till php-webbtjänst och hämtar det?