0

私は、PL/SQLパッケージOS_COMMAND(それ自体はJavaを使用しています)を使用してシェル・コマンドを実行しています。私は彼らの戻りコードを観察することができます。PL/SQLからオペレーティング・システムを決定する

私はWindowsか他のオペレーティングシステムで動作しているかどうかを確認したいと思います。

私は異なるアプローチを作ってみた

  • 私の最初のアイデア:( 常に成功する必要があります)特定のWindowsコマンドを実行し、リターンコードをチェック:0 Windowsを意味し、 何か他の手段他のOS。例
    • SELECT platform_id, platform_name FROM v$database
    • SELECT dbms_utility.port_string FROM DUAL
    • SELECT NAME FROM v$dbfileとフォーマットを一あなたが検討する

を確認するために、データベース情報を使用して

  • Javaストアド・プロシージャ
  • を使用して
  • "最も安全"?他のアプローチを使用していますか?利点/欠点は何ですか?

    私はJavaストアドプロシージャを避けたいと思いますし、データベース情報の解釈方法を正確にはわかりません(Windowsを体系的にチェックする方法: 'WIN'または 'Windows'を含む結果、または... ?)。特定のWindowsコマンドで確認する場合は、どちらを使用する必要がありますか?

    私はどんな方向へのアドバイスについてもうれしいでしょう。

  • +0

    ? DBまたはクライアントのOS名は何ですか? –

    +0

    DBがWindows上で動作している場合は_x_を実行したい、そうでなければ_y_を実行したい。 – User42

    答えて

    1

    とにかく遅い応答が、私の2セントです。

    「環境」間の不要な呼び出しを避けるために、データベース環境から情報を直接取得することが最もよいと思われます。だから、3つのmentionnedオプションに直接私たちをもたらします:

    1. 五$データベース:だけでなく、あなたが情報に頼ることができるとその観点から、これはかなり「安全な」解決策はそう。欠点としては、これが機能するためには、基になるテーブルに対して少なくともselect特権が必要です。これは、特定の環境では問題になる可能性があります。
    2. dbms_utility.port_string:ここでの権限については心配する必要はありませんが、オプション1の場合と同じように多くの情報を得ることはできません。また、OSの判別にのみ使用してください。
    3. v $ dbfile:これは廃止されたビューなので、まずv $ datafileを使用する方がよいでしょう。しかし、このアプローチでは重要な欠点があります.ASMを使用するときにはどうしますか?誤っていないと、ASMを使用している場合、すべてのOSプラットフォームで名前の形式が同じになります。あなたがやろうとしているもの

    乾杯

    ビョルン

    関連する問題