В определенном коде мы используем dbms_sql для динамического выполнения процедуры.
Существует переменная, скажем, k, которую мы привязываем к выходному значению proc, скажем, ot1.
Мы делаем это следующим образом:
Dbms_sql.bind_variable ( cur , 'ot1', k, 2048)
И затем выполняем процедуру следующим образом:
Dbms_output.execute(cur)
И получаем значение ot1 следующим образом:
Dbms_sql.variable_value(cur , 'ot1' , k)
Ot1
имеет тип varchar2 и является выходным параметром для выполняемого процесса.
K
также имеет тип varchar2.
При выполнении /при тестировании proc в db с теми же входными параметрами значение ot1
равно "300", но при динамическом выполнении, как упомянуто выше, я получаю ora-06502 при
Dbms_sql.variable_value( cur , 'ot1, k)
для другихвводит значения наподобие «400», «250» и т. д., но в этих случаях эта ошибка не появляется ..
ora 06502 возникает, когда есть переполнение, но для выходного параметра varchar2это не может быть переполнением, так как значение составляет только 300 и такой ошибки нетВидно для значений 400, 500, 250
И это, я не чувствую, несоответствие типов, поскольку выходное значение может быть обработано как строка ... и такие ошибки не видны с другим выводомзначения типа «400» и «250».
В чем здесь проблема?