我正在.net 中运行一些代码,使用.net 中的oracleclient。SQL 代码可以使用 DBMS_PUT_LINE 函数输出许多响应,然后我通过调用 DBMS_GET_LINE 来检索这些响应。如果输出只是特定的文本行,即 'DBMS_OUTPUT.PUT_LINE('USER IS NOT AVAILABLE : PLEASE CONTACT SYSTEM ADMINISTRATOR');' 然后对 get_line 的调用工作正常,我得到了那个文本。但是,如果调用是输出 SQL 错误消息,'DBMS_OUTPUT.PUT_LINE(SQLERRM);' 然后我得到以下错误返回,'ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error'
真正奇怪的是,如果我第二次运行完全相同的代码(包括关闭并重新连接到数据库),那么对 get_line 的调用将返回正在输出的实际错误消息。
我的代码基本上执行以下操作:
打开数据库连接 使用 executeNonQuery 运行 SQL 查询 创建输出参数,例如:
Dim anonymous_block = "begin dbms_output.get_line(:1, :2); end;"
aCmd.CommandText = anonymous_block
aCmd.Parameters.Add("1", OracleType.VarChar, 32000)
aCmd.Parameters("1").Direction = ParameterDirection.Output
aCmd.Parameters.Add("2", OracleType.Int32)
aCmd.Parameters("2").Direction = ParameterDirection.Output
然后运行另一个 executeNonQuery 以获取输出。
然后用 .close() 关闭数据库
但在第二次运行时,它得到了正确的输出。我可能有一些东西我第一次没有正确设置?
有什么想法吗?我总是可以只运行两次代码,但这似乎非常低效。