我需要在oracle安装文件夹中创建一个oracle目录。就我而言,这条路是D:\app\Administrator\product\11.2.0\dbhome_1
。我试过了create directory ora_dir as '\'
,但这可参考D:\
。有什么方法可以创建指向oracle_home的目录?
问候。
如果您已经通过过程动态地执行此操作,则可以通过Java调用获取ORACLE_HOME环境变量(无论如何,该变量是在实例启动时设置的),但是您需要一个单独的函数:
create or replace function getenv(name varchar2) return varchar2
as language java
name 'java.lang.System.getenv(java.lang.String) return java.lang.String';
/
create or replace procedure p42 as
begin
execute immediate q'[CREATE or replace DIRECTORY DIRECTORY_DIR AS ']'
|| getenv('ORACLE_HOME') || q'[']';
end;
/
假设两个都编译正常,则在执行目录时将使用环境变量的路径创建目录:
exec p42;
PL/SQL procedure successfully completed.
select directory_path
from all_directories
where directory_name = 'DIRECTORY_DIR';
DIRECTORY_PATH
----------------------------------------
/dboracle/orabase/product/11.2.0
如果您的过程在软件包中,则该函数也可以在其中,如果您愿意,也可以私下进行。而且,您不需要任何其他特权即可使用Java调用(create procedure
在这种情况下已经拥有)。
不幸的是,这在Windows中不起作用,因为在注册表中而不是环境中设置了ORACLE_HOME;可能可以从注册表中获取信息,但您可能还拥有多个Oracle Home,因此您必须确定要使用哪个注册表项。
(如Aramillo所发现的),还有一个[未记录的]内置DBMS_SYSTEM
软件包可以提供相同的信息。可以做到的:
create or replace procedure p42 as
l_oracle_home varchar2(100);
begin
dbms_system.get_env('ORACLE_HOME', l_oracle_home);
execute immediate q'[CREATE or replace DIRECTORY DIRECTORY_DIR AS ']'
|| l_oracle_home || q'[']';
end;
/
但是,您需要在该程序包上授予执行许可,并且它的未记录状态可能使您暂停。无论如何,某些功能似乎仅限于SYSDBA(注释159968.1)。
在寻找My Oracle Support寻找DBMS_SYSTEM
参考的同时,我也偶然发现了这个选项:
select nvl(substr(file_spec, 1, instr(file_spec, 'lib') -2),
substr(file_spec, 1, instr(lower(file_spec), 'bin') -2)) as oracle_home
from dba_libraries
where library_name='DBMS_SUMADV_LIB';
...显然也可以在Windows上使用,但是您需要足够的特权才能查看数据字典条目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句