|
Программирование >> Oracle
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.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |