sql >> Databáze >  >> RDS >> Oracle

Oracle Uživatelsky definovaný typ uvnitř definice balíčku

Ne, není to povoleno:

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>

Pokud chcete vytvořit typ, který pouze předává data mezi procedurami PL/SQL, použijte syntaxi 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>

Pokud však chcete typ, který můžete použít v příkazu SQL – tedy jako vstup do TABLE() funkce - budete ji muset vytvořit jako typ SQL. SQL a PL/SQL používají dva různé motory a pro stroj SQL jsou viditelné pouze typy SQL.

Moje rada o nezbytnosti SQL Types již neplatí pro pozdější verze Oracle. Určitě v 11gR2 a 12c bude SQL engine podporovat SQL v PL/SQL balíčcích, které používají PL/SQL tabulky v TABLE() doložka. Typy musí být deklarovány ve specifikaci balíčku, tedy veřejné a viditelné pro SQL engine. Pod kryty Oracle generuje typy SQL pro každou deklaraci. Tyto typy můžete najít, protože jejich názvy začínají SYS_PLSQL_ následují číselné identifikátory.



  1. Jak najít duplikáty v tabulce mysql pomocí PHP?

  2. Jak rozdělit řetězec v PostgreSQL

  3. PreparedStatement:Mohu zadat název sloupce jako parametr?

  4. Použití podmínky If v klauzuli where