动态 SQL 的 Oracle PL/SQL 异常
Posted
技术标签:
【中文标题】动态 SQL 的 Oracle PL/SQL 异常【英文标题】:Oracle PL/SQL Exception for Dynamic SQL 【发布时间】:2014-05-20 06:38:15 【问题描述】:我的代码有问题(如下),假设路径 'E:\Oracle\test' 不存在(心理文件夹不存在),所以它应该转到错误异常处理程序和写一个错误日志,但它没有。相反,它成功创建了 Oracle 目录,为什么会发生这种情况?我的代码哪里出错了?
谁能帮帮我,非常感谢 数据库是Oracle 11g
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;
【问题讨论】:
【参考方案1】:Oracle 数据库中创建的目录只是磁盘上真实事物的别名。 Oracle 不会验证您指定的目录是否确实存在。
【讨论】:
但是,当我简单地执行 CREATE OR REPLACE TEST_DIR AS 'E:\Oracle\Test\' (物理文件夹不存在)时,它会返回一个错误 奇怪,应该没什么区别。首次创建目录时是否发生异常(因此不替换)? @erwin 你能添加“坏”代码和它生成的错误消息吗?在我的测试数据库上,我当然可以创建一个路径错误的目录并且不会收到错误消息。以上是关于动态 SQL 的 Oracle PL/SQL 异常的主要内容,如果未能解决你的问题,请参考以下文章
异常后停止 PL/SQL 代码(PL/SQL、ORACLE)