Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Объявление переменной типа RECORD в объекте

#sql #oracle #plsql #oracle12c


Хочу создать объект с переменной типа record внутри, пишу код:

CREATE OR REPLACE TYPE someType_t AS OBJECT
(
  connection UTL_TCP.connection

) FINAL;


Выдает ошибку: Error: PLS-00201: identifier 'UTL_TCP.CONNECTION' must be declared

Гранты на UTL_TCP есть



Если объявить переменную этого типа в анонимном блоке, то всё ок

declare
  connection UTL_TCP.connection;
begin
  null;
end;


Версия: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
    


Ответы

Ответ 1



Если указать полное имя типа, то сообщение об ошибке будет более понятным: create or replace type tcpconn as object ( conn sys.utl_tcp.connection ); / PLS-00329: schema-level type has illegal reference to SYS.UTL_TCP Нельзя использовать типы данных обьявленные не на уровне схемы. Для переменных с PL/SQL типом данных воспользуйтесь пакетами: create or replace package util_tcp as function getConnection return utl_tcp.connection; procedure setConnection (conn utl_tcp.connection); end; / create or replace package body util_tcp as conn_ utl_tcp.connection; function getConnection return utl_tcp.connection is begin return conn_; end; procedure setConnection (conn utl_tcp.connection) is begin util_tcp.conn_ := conn; end; end; /

Ответ 2



Проблема оказалась банальной - SQL не поддерживает PL/SQL типы данных для аттрибутов объектов.

Комментариев нет:

Отправить комментарий