Exception handling 动态SQL的Oracle PL/SQL异常

Exception handling 动态SQL的Oracle PL/SQL异常,exception-handling,plsql,Exception Handling,Plsql,我的代码有问题(如下),假设路径“E:\Oracle\test”不存在(心灵文件夹不存在),因此它应该转到错误异常处理程序并编写错误日志,但它不存在。相反,它成功地创建了Oracle目录,为什么会发生这种情况?我的代码哪里出错了 有人能帮帮我吗?非常感谢 数据库是oracle11g DECLARE var1 VARCHAR2(2000) := 'somepath'; var2 VARCHAR2(2000) := 'directoryname'; err VARCHAR2(2000); BEG

我的代码有问题(如下),假设路径“E:\Oracle\test”不存在(心灵文件夹不存在),因此它应该转到错误异常处理程序并编写错误日志,但它不存在。相反,它成功地创建了Oracle目录,为什么会发生这种情况?我的代码哪里出错了

有人能帮帮我吗?非常感谢 数据库是oracle11g

DECLARE
var1 VARCHAR2(2000) := 'somepath';
var2 VARCHAR2(2000) := 'directoryname';
err  VARCHAR2(2000);

BEGIN
file_path_ := 'E:\Oracle\test\' || var1 || '\';
temp_dir_ := 'TEST_DIR_' || var2;
plsql_block_ := 'CREATE OR REPLACE DIRECTORY ' || temp_dir_ || ' AS ' || '''' ||file_path_ || '''';
EXECUTE IMMEDIATE plsql_block_;

SAVEPOINT Start_Trans;

<some code here>

EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO Start_Trans;
err := substr(SQLERRM,1,2000);
Write_Log('ERROR', var1, err_);

END;
声明
var1 VARCHAR2(2000):=“somepath”;
var2 VARCHAR2(2000):=“directoryname”;
err VARCHAR2(2000年);
开始
文件路径='E:\Oracle\test\'|| var1 | |'\';
temp_dir:=“TEST_dir_”| var2;
plsql|u block|:=“创建或替换目录”|| temp|u dir|||作为“||”|文件路径| |”;
执行立即plsql\u块\u0;
保存点启动\u传输;
例外情况
当其他人
回滚以启动_Trans;
err:=substr(SQLERRM,12000);
写入日志(“错误”,变量1,错误);
结束;

在Oracle数据库中创建的目录只是磁盘上真实对象的别名。
Oracle不会验证您指定的目录是否确实存在。

但是,当我简单地以“E:\Oracle\TEST\”(物理文件夹不存在)的形式执行CREATE或REPLACE TEST\U DIR时,它确实会返回一个ERRORSTANGE,应该不会有什么不同。第一次创建目录时是否发生异常(因此没有替换)?@erwin能否添加“错误”代码及其生成的错误消息?在我的测试数据库上,我当然可以创建一个路径不正确的目录,并且不会收到错误消息。