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