Привязка проблемы с оператором OPEN-FOR-USING - PullRequest
1 голос
/ 01 февраля 2010

У меня есть курсор в функции ORACLE, который я динамически генерирую, используя аргументы функции.

Я определяю текст курсора и в некоторых случаях включаю следующее утверждение:

      sql_stmt := sql_stmt || 'AND MOD ( LOG_ID, :logsetmax ) = :logset ';

Я открываю курсор и передаю аргументы, используя оператор ORACLE OPEN-FOR-USING (например, с: logsetmax установлено в 3 и: logset установлено в 0).

Когда моя программа включает ограничение, указанное выше, моя программа зависает, и я получаю ошибки ORA-03113 и ORA-03114.

Неужели ORACLE мешает мне связать аргумент курсора: logsetmax (переданный с помощью USING) в функцию MOD моего объявления курсора и вызывает это непредсказуемое поведение?

Я подозреваю, что моя ошибка вызвана делением на ноль необязательного аргумента, который приводит к превышению времени ожидания соединения ORACLE?

Любые предложения будут с благодарностью.

UPDATE

В качестве практического решения я пересмотрел свой SQL, чтобы удалить эти ограничения из привязки курсора, и жестко запрограммировал их в SQL следующим образом:

            sql_stmt := sql_stmt || 'AND MOD ( LOG_ID, ' || p_logsetmax || ' ) = ' || p_logset || ' ';

1 Ответ

2 голосов
/ 01 февраля 2010

ORA-03113: ошибка конца файла в канале связи является общей ошибкой.Ошибка ORA-03113 при подключении предполагает, что соединение было установлено, но потеряно позже, как тайм-аут.

Существует множество возможных причин ошибки ORA-03113.

ORA-3113 может быть сигнализирован для любого из следующих сценариев:

  • Сбой машины
  • Процесс сервера был остановлен на уровне O / S
  • Проблемы с сетью
  • Внутренние ошибки / прерывания Oracle на сервере
  • Клиент неправильно обрабатывает несколько соединений
  • и т. Д. Множество возможных причин

Действие: Произошла ошибка связи, требующая дальнейшего изучения.Сначала проверьте наличие проблем с сетью и просмотрите настройки SQL * Net.Кроме того, посмотрите в файле alert.log на наличие ошибок.Наконец, проверьте, не работает ли серверный процесс и был ли создан файл трассировки во время сбоя.

source: ora-code.com

...