Программирование >>  Oracle 

1 ... 309 310 311 [ 312 ] 313 314 315 ... 469


1350 Глава 18

Это сообщение об ошибке при обращении к внешней процедуре почти наверняка связано с ошибкой в разработанном вами коде. Эта ошибка возникает, когда исчезает внешний процесс. Это происходит в случае слета программы. Например, я добавил строку:

char * return string (OCIExtProcContext * ctx, short * return i,

int * return l)

*return i = OCI IND NOTNULL; *(char*)NDLL = 1;

return return value;

в конце текста функции returnstring. После перекомпиляции обнаружилось следующее:

ops$tkyte@ORA816.US.ORACLE.COM> exec dbms output.put line( demo passing pkg.return string)

BEGIN dbms output.put line(demo passing pkg.return string); END;

ERROR at line 1:

ORA-28576: lost RPC connection to external procedure agent

Это сообщение об ошибке будет выдаваться до тех пор, пока вы не устраните ош ку в исходном коде.

ORA-28577 аргумент %s внешней процедуры %s имеет неподдерживаемый тип данных %s

28577, 00000, argument %s of external procedure %s has unsupported ->datatype %s

* Причина: при передаче аргументов внешней процедуры агенту обнаружен тип данных, не поддерживаемый системой.

* Действие: найдите в документации список поддерживаемых типов данн / / аргументов внешних процедур.

Эта ошибка возникает при попытке передать из PL/SQL во внешнюю процедуру тип данных, не поддерживаемый данным интерфейсом. В частности, это относится к PL/SQL-таблицам. Если в примере demo passing объявить тип numAArray в спецификации пакета:

type numArray is table of number index by binary integer; procedure pass(p in in numArray, p out out nurray);

а не как тип вложенной таблицы SQL, во время выполнения произойдет следующее:

1 declare

2 linput demo passing pkg.numArray;

3 loutput demo passing pkg.numArray;

4 begin

5 demo passing pkg.pass(linput, loutput);



Внешние процедуры на языке С 1351

6* end;

SQL> /

declare

EEROR at line 1:

ORA-28577: argument 2 of external procedure passnumArray has unsupported datatype

ORA-06512: at OPS$TKYTE.DEM0 PASSING PKG , line 0 ORA-06512: at line 5

Причина в том, что передача PL/SQL-таблиц не поддерживается (можно передавать наборы, тип которых создан в базе данных, но не PL/SQL-таблицы).

ORA-28578 ошибка протокола во время вызова внешней процедуры

28578, 00000, protocol error during callback from an external procedure * Причина: произошла внутренняя ошибка протокола при попытке выполнить обращение (callback) к серверу Oracle из

созданной пользователем внешней процедуры.

* Действие: свяжитесь со службой поддержки Oracle.

К счастью, я никогда не получал ни этого, ни приведенного ниже сообщения об ошибке. Оно свидетельствует о внутренней ошибке сервера Oracle. Единственное, что можно сделать, получив это сообщение об ошибке, - попытаться воспроизвести его с помощью небольшого тестового кода и сообщить о проблеме службе поддержки Oracle.

ORA-28579 сетевая ошибка во время вызова от агента внешней процедуры

ORA-28579 network error during callback from external procedure agent

* Причина: произошла внутренняя ошибка сети при попытке выполнить

обращение (callback) к серверу Oracle из созданной

пользователем внешней процедуры.

* Действие: свяжитесь со службой поддержки Oracle.

ORA-28580 рекурсивные внешние процедуры не поддерживаются

ORA-28580 recursive external procedures are not supported

* Причина: обращение из внешней процедуры привело к вызову другой

внешней процедуры.

* Действие: проверьте, не вызывает ли выполняем1й при обращении к серверу SQL-код (непосредственно или косвенно, например

при срабатывании триггера) другую внешнюю процедуру, PL/

SQL-процедуру, вызывающую внешние процедуры и т.д.

Эта ошибка возникает при обращении из внешней процедуры к серверу, когда вызванная процедура обращается к другой внешней процедуре. Другими словами, внешняя процедура не может прямо или косвенно вызывать другую внешнюю процедуру. Это можно продемонстрировать, изменив .рс-файл для нашего пакета LOB IO. Я добавил в этот файл следующее:

{int x;

exec sql execute begin



1352 Глава 18

:x := demo passing pkg.return number; end; end-exec;

if (sqlca.sqlcode < 0)

return raise application error (ctx, 20000,

Error:\n%.7 0s , sqlca.sqlerrm.sqlerrmc);

сразу после вызова REGISTER CONNECT. Теперь при попытке выполнения основной функции пакета lob io мы получим:

ops$tkyte@DEV8I.WORLD> declare x clob; у number; begin у := lob io.write(x, x); end;

2 /

declare x clob; у number; begin у := lob io.write(x, x) ; end;

ERROR at line 1: ORA-20000: Error:

ORA-28580: recursive external procedures are not supported ORA-06512:

ORA-06512: at OPS$TKYTE.LOB IO , line 0

ORA-06512: at line 1

Единственное решение - никогда не вызывать из внешней процедуры другую внешнюю процедуру.

ORA-28582 прямое соединение с этим агентом не разрешено

$ oerr ora 28582

28582, 00000, a direct connection to this agent is not allowed * Причина: пользователь или инструментальное средство пытается непосредственно подключиться к агенту внешних процедур

к агенту гетерогенных служб (Heterogeneous Services),

например:

SVRMGR> CONNECT SCOTT/TIGER@NETWORK ALIAS .

Такие подключения не разрешены.

* Действие: при выполнении оператора CONNECT проверьте, не ссылается ли связь базы данных или псевдоним на агента гетерогенных

служб или агента внешних процедур.

Это сообщение может быть выдано только после попытки подключиться к базе данных, если случайно указано имя службы, сконфигурированной подключения к ужбе внешних процедур.

ORA-06520 PL/SQL: ошибка загрузки внешней библиотеки

$ oerr ora 6520

06520, 00000, PL/SQL: Error loading external library

* Причина: выявлена ошибка, связанная с попыткой динамической

загрузки внешней библиотеки в PL/SQL.



1 ... 309 310 311 [ 312 ] 313 314 315 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика