概括
我有一个 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,我猜测错误正在被封装并且正在返回一个简单的通过/失败从执行调用:
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