Нет проблем с передачей числа в DBMS_OUTPUT.PUT_LINE
. Oracle автоматически преобразует другие встроенные типы в VARCHAR2
, используя формат по умолчанию. Вам нужно использовать TO_CHAR
, только если вы хотите контролировать используемый формат - это часто хорошая идея, но, как правило, не обязательно.
Одна из возможностей, однако, заключается в том, что вы не видите вывод, потому что вы не включили его. Если вы запускаете свой тест в SQLPlus, убедитесь, что вы SET SERVEROUTPUT ON
, прежде чем запускать код, который включает вызовы DBMS_OUTPUT. Если вы используете какой-то другой клиент, обратитесь к его документации для правильного включения DBMS_OUTPUT. (Конечно, вы можете проверить, включен ли он, добавив еще один вызов для вывода строкового литерала.)
Нет ничего плохого в методике, которую вы используете для заполнения параметра out. Однако нет необходимости возвращать два столбца из курсора; ваш select *
может быть просто select CODSDP
. Похоже, вы ошибочно полагаете, что любой столбец, указанный в предикатах, должен быть в списке выбора, но это не так. В вашем самом внутреннем запросе список выбора не обязательно должен включать NRONIP
или CODTIPOMOV
, потому что они не указаны во внешних блоках; предложение WHERE в этом запросе может ссылаться на любой столбец в таблице, независимо от того, находится ли он в списке выбора.
Итак, мое первое предположение состоит в том, что у вас просто не включен вывод на сервер. Единственная другая возможность, о которой я могу подумать сейчас, это то, что вы выполняете свой запрос и процедуру в двух разных сеансах, и в одном из них есть незафиксированная транзакция для таблицы, поэтому они фактически видят разные данные.
Если эти предложения не кажутся проблемой, я бы посоветовал вам запустить свои тесты автономного запроса и процедуры в одном сеансе SQLPlus, а затем скопировать и вставить весь сеанс здесь, чтобы мы могли точно видеть что ты делаешь.