如何从PL/SQL确定ORACLE_HOME?

发布于 2024-07-24 07:11:54 字数 171 浏览 5 评论 0原文

是否可以使用纯 PL/SQL 确定 Oracle 的安装位置?

使用案例: 为了调用外部 C 库,我需要知道它的确切路径(用于 create library 调用)。 我的 DLL 将驻留在 Oracle 的 BIN 目录中,但我无法在脚本中硬编码 DB 安装的路径...

Is it possible to determine where Oracle is installed using pure PL/SQL?

Use case:
In order to call an external C library, I need to know its exact path (for the create library call). My DLL will reside in Oracle's BIN directory, but I can't hard-code the path of the DB installation in my scripts...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

落花随流水 2024-07-31 07:11:54
DECLARE
 RetVal VARCHAR2(100);
BEGIN
  dbms_system.get_env('ORACLE_HOME', RetVal);
  dbms_output.put_line(RetVal);
END;

注意:默认情况下您可能没有此包的权限。

DECLARE
 RetVal VARCHAR2(100);
BEGIN
  dbms_system.get_env('ORACLE_HOME', RetVal);
  dbms_output.put_line(RetVal);
END;

NOTE: It is likely you that you will not have permission to this package by default.

绝影如岚 2024-07-31 07:11:54

在 Windows 和 Oracle 10g 上,这有效:

SELECT  
substr(file_spec,1,instr(file_spec,'\',1,3)) 
FROM dba_libraries 
WHERE library_name='DBMS_SUMADV_LIB'

On Windows and Oracle 10g, this works:

SELECT  
substr(file_spec,1,instr(file_spec,'\',1,3)) 
FROM dba_libraries 
WHERE library_name='DBMS_SUMADV_LIB'
囍孤女 2024-07-31 07:11:54

从 Oracle 12c 开始,您可以使用 SYS_CONTEXT 函数:Oracle 文档

SET SERVEROUTPUT ON
BEGIN
   DBMS_OUTPUT.PUT_LINE(SYS_CONTEXT('USERENV','ORACLE_HOME'));
END;
/

/u01/app/oracle/product/12.1.0.2/dbhome_1

Starting from Oracle 12c, you can use the SYS_CONTEXT function: Oracle docs

SET SERVEROUTPUT ON
BEGIN
   DBMS_OUTPUT.PUT_LINE(SYS_CONTEXT('USERENV','ORACLE_HOME'));
END;
/

/u01/app/oracle/product/12.1.0.2/dbhome_1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文