Oracle
 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/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>

Ако обаче искате тип, който можете да използвате в SQL израз - тоест като вход към TABLE() функция - ще трябва да го създадете като тип SQL. SQL и PL/SQL използват две различни машини и само типовете SQL са видими за SQL машината.

Моят съвет относно необходимостта от SQL типове вече не е верен за по-късните версии на Oracle. Със сигурност в 11gR2 и 12c SQL машината ще поддържа SQL в PL/SQL пакети, които използват PL/SQL таблици в TABLE() клауза. Типовете трябва да бъдат декларирани в спецификацията на пакета, следователно публични и видими за SQL двигателя. Под капаците Oracle генерира SQL типове за всяка декларация. Можете да забележите тези типове, защото имената им започват SYS_PLSQL_ последвано от цифрови идентификатори.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle как да разделя данните и да получава записи на всеки 10%

  2. Sql заявка с изпълнение на променливи за свързване в Jdbc

  3. Как мога да добавя/свържа BLOB данни към BLOB колона с помощта на командата SQL UPDATE в ORACLE

  4. ORA-01792:максималният брой колони в таблица или изглед е 1000 грешка при използване на WITH в sql

  5. Java:Четене на Blob от Oracle