#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 типы данных для аттрибутов объектов.
Комментариев нет:
Отправить комментарий