【发布时间】:2020-05-21 17:56:41
【问题描述】:
我在 Oracle 中看到了很多这样的例子。它只是不适合我。 Oracle 11。我在第 15 行收到此错误。谢谢大家!
declare
v_path nvarchar2(256);
v_object_exists number;
begin
-- Use the directory Oracle DB provide for tracing.
select VALUE into v_path from V$DIAG_INFO where NAME = 'Diag Trace';
--dbms_output.put_line(v_path);
-- Set up new directory!
select count(*) into v_object_exists from all_objects where object_name = 'DIAG_TRACE' and object_type = 'DIRECTORY';
if v_object_exists > 0 then
execute immediate 'DROP DIRECTORY DIAG_TRACE';
end if;
dbms_output.put_line('CREATE OR REPLACE DIRECTORY DIAG_TRACE AS ''' || v_path || '''');
execute immediate 'CREATE OR REPLACE DIRECTORY DIAG_TRACE AS ''' || v_path || '''';
end;
【问题讨论】:
-
文件系统目录的权限问题?可以直接从你的界面(sqldeveloper、sqlplus、sqlci)执行吗?
-
@JeffHolt - DROP DIRECTORY 永远不会触及实际的操作系统文件系统。被删除的目录只是数据库中的一个对象......操作系统文件系统上目录的别名。
-
@EdStevens 是的,但 OP 说第 15 行是创建,而不是删除。
-
@JeffHolt - 这也适用于创建。在您尝试使用目录(即读/写)之前不会评估操作系统端 - 这可能有点令人困惑。路径在创建时甚至没有经过验证。
-
是的,如果我手动运行它,我可以很好地运行该语句。
标签: oracle ddl execute-immediate