从PL / SQL确定操作系统

时间:2016-03-23 15:28:10

标签: windows command-line plsql java-stored-procedures return-code

我正在使用PL / SQL包OS_COMMAND(它本身使用Java)来执行shell命令。我可以观察他们的返回码。

我想确定我是在Windows上运行还是在任何其他操作系统上运行。

我提出了不同的方法:

  • 我的第一个想法:执行一个特定的Windows命令(应该是 总是成功的)并检查返回码:0表示Windows, 其他任何意味着其他操作系统。
  • 使用Java存储过程
  • 例如,使用数据库信息
    • SELECT platform_id, platform_name FROM v$database
    • SELECT dbms_utility.port_string FROM DUAL
    • SELECT NAME FROM v$dbfile并检查格式

您认为哪一个“最安全”?你用其他方法吗?有什么优点/缺点?

我想避免Java存储过程,我不知道如何解释数据库信息(如何系统地检查Windows:结果包含'WIN'或'Windows',或......? )。如果您使用特定的Windows命令检查,我应该使用哪一个?

我会对任何方向的建议感到高兴。

1 个答案:

答案 0 :(得分:1)

有点迟到的反应,但无论如何这里是我的两分钱。

我同意你的意见,最好直接从数据库环境获取信息,以避免“环境”之间不必要的调用。这样就直接将我们带到了3个提到的选项:

  1. v $ database:你可以依赖这些信息,从这个角度来看,这似乎是一个非常“安全”的解决方案。在缺点方面,您至少需要在基础表上选择特权才能使其正常工作,这可能是某些环境中的问题。
  2. dbms_utility.port_string:不用担心这里的权限,但是你没有得到与选项1一样多的信息。请记住只使用它来进行操作系统测定而不是oracle版本。
  3. v $ dbfile:这是一个不赞成使用的视图,所以首先要使用v $ datafile。但是这种方法的一个重要缺点是:当使用ASM时你打算做什么?如果我没弄错的话,使用ASM时,所有操作系统平台上的名称格式都是相同的。
  4. 干杯

    的Björn