Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Typ zdefiniowany przez użytkownika Oracle w definicji pakietu

Nie, to niedozwolone:

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>

Jeśli chcesz utworzyć typ, który po prostu przekazuje dane między procedurami PL/SQL, użyj składni 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>

Jeśli jednak potrzebujesz typu, którego możesz użyć w instrukcji SQL - to jest jako dane wejściowe do TABLE() funkcja - będziesz musiał ją utworzyć jako typ SQL. SQL i PL/SQL używają dwóch różnych silników i tylko typy SQL są widoczne dla silnika SQL.

Moja rada dotycząca konieczności SQL Types nie jest już prawdziwa dla późniejszych wersji Oracle. Z pewnością w 11gR2 i 12c silnik SQL będzie obsługiwał SQL w pakietach PL/SQL, który używa tabel PL/SQL w TABLE() klauzula. Typy muszą być zadeklarowane w specyfikacji pakietu, a więc publiczne i widoczne dla silnika SQL. Pod osłonami Oracle generuje typy SQL dla każdej deklaracji. Możesz zauważyć te typy, ponieważ ich nazwy zaczynają się od SYS_PLSQL_ po których następują identyfikatory numeryczne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieprawidłowy znak w ciągu zapytania SQL (ORA-00911)

  2. SSIS nie może zapisać pakietów i ponownie uruchamia program Visual Studio

  3. Ropucha dla Oracle..Jak wykonać wiele instrukcji?

  4. Oracle, jak zaimportować brakujące klasy java podczas wywoływania java z plsql

  5. Jak skonfigurować c3p0 w trybie hibernacji, aby automatycznie odświeżać stare połączenia z bazą danych?