【发布时间】:2013-08-15 11:45:55
【问题描述】:
总结
我有一个 Oracle 过程,它具有与下面类似的 EXCEPTION 块。我想将 raise_application_error 的输出传递回 Microsoft Access 并将其显示给用户。是 Microsoft Access 调用了这个 Oracle 过程。
EXCEPTION
WHEN e_invalidids THEN
raise_application_error (-20001,'Invalid ids in Upload Table.');
WHEN e_missingdate THEN
raise_application_error (-20002,'Missing Date in Upload Table.');
WHEN OTHERS THEN
raise_application_error (-20000,'An error was encountered - ' || SQLCODE || ' -ERROR- ' || SQLERRM);
END;
请求
我想指出正确的方向 - 给定一种在 Access 中报告此错误的方法。
如果解决方案是将 Oracle 过程转换为函数 - 那么我希望有人能够正确地 谈谈如何做到这一点(即捕获异常然后返回值)
背景信息
我正在编写一个用户空间工具来将数据导入 Oracle 数据库,使用 Access 数据库作为前端。数据从 Excel 导入、清理、更正,并针对各种验证检查进行测试。 Access 然后使用 ADO 将数据写入 Oracle 服务器上的表,然后调用 PL/SQL 过程来处理它。
该过程执行许多验证检查(有些是重复的,有些是特定于数据库的)。通过后,它会读入每条记录 - 对其进行解释 - 并填充数据库中的规范化表。
考虑到已经在 Access 中进行的验证检查的数量,我真的不希望 Oracle 过程会引发任何错误 - 但如果有,我希望将错误传递回 Access 并显示到用户。
我的尝试
我在这个论坛和谷歌上搜索过。从我读到的 - raise_application_error 将输出返回给调用客户端 - 但鉴于 Oracle 和 Access 之间有一个 OLE DB 提供程序和 ADO DB API,我猜测错误正在被封装并且正在返回一个简单的通过/失败来自 Execute 调用:
oraConn.Execute "import_data"
oraErrText = ""
Set oraErrors = oraConn.Errors
For Each oraError In oraErrors
debug.print oraError.Number
debug.print oraError.Description
debug.print oraError.Source
debug.print oraError.SQLState
debug.print oraError.NativeError
Next
以上导致单一错误:ORA-00900: invalid SQL statement
【问题讨论】:
标签: oracle ms-access exception-handling error-handling adodb