Кажется, вы запутались между supplierid
и supplier
. Вам нужно определить переменную для supplier
, чтобы напечатать строку вывода, и, скорее всего, вы определили переменную командной строки supplierid
, которая имеет числовой тип.
Итак, используйте ниже:
SQL> set serveroutput on;
SQL> var supplier varchar2;
SQL> execute test(2279, :supplier);
supplier
---------
Afzal -- as an example name
Возможно, это не относится, но я думаю, что это все же следует упомянуть. CommandTimeOut по умолчанию - 30 секунд. Этого времени должно быть достаточно для любых действий, которые происходят в 99,9% веб-приложения. Если вы не уверены, что действие должно занять больше времени, вам следует потратить свое время, пытаясь оптимизировать sql, чтобы он возвращался через <30 секунд. Хорошее начало для этого - правильное индексирование.
Вы можете увеличить период ожидания для команды, установив SqlCommand.CommandTimeout ] свойство.
+1 to Al because 30 seconds should be plenty. Making the timeout period longer is really only a bandage to the underlying problem.
In my experience the stored proc is too expensive 90% of the time. When I was reviewing these errors last, I had a general rule of thumb that no stored proc cost more than 1.00. The more expensive they are, the greater the risk we had of blocking and generating these exceptions.
Вы можете выполнить это, добавив «Connect Timeout = 90 дюймов к соединительной строке. Если ваш запрос занимает больше 30 секунд, вам действительно стоит подумать об оптимизации запроса. Может потребоваться добавление индексов или создание представления и т. Д.
Отредактировано для исправления проблемы, указанной в комментариях @Stijn.