web-dev-qa-db-ja.com

PowerShellでSQLPlusスクリプトを実行する方法

PowerShellを使用してOracleDBにログインし、「C:\ Users\Administrator\Desktop\Oracle\OracleCleanTest.sql」というスクリプトを実行しようとしていますが、PSを実行しても何も起こりません。

これが私が持っているものです。

$adminLogon = "sys as sysdba/manager@ORCL"
$logon = "sqlplus\sql/manager@ORCL"


$mydata = Invoke-SqlPlus -inputfile       "@C:\Users\Administrator\Desktop\Oracle\OracleCleanTest.sql" $logon

私もこれを試しました。

$database = "ORCL";
$user = "sys as sysdba";
$pw = "manager";

sqlplus.exe -d $database -U $user -P $pw -I "@C:\Users\Administrator\Desktop\Oracle\OracleCleanTest.sql"

私はこれを試しました。

& 'C:\app\Administrator\product\11.2.0\client_1\BIN\sqlplus.exe' 'QE-JDBC-1/manager@ORCL sys as sysdba' '@C:\Users\Administrator\Desktop\Oracle\OracleCleanTest.sql'

「&:モジュール「sqlplus」をロードできませんでした。詳細については、「Import-Modulesqlplus」を実行してください。行:5char:3 +&$ mydata Invoke-SqlPlus -inputfile "@C:\Users\Administrator\Desktop\Oracle\Orac ... + ~~~~~~~ + CategoryInfo:ObjectNotFound:(sqlplus\sql/manager @ ORCL:String)[]、ParentContainsErrorRecordException + FullyQualifiedErrorId:CouldNotAutoLoadModule "

7
user3826435

キースヒルが質問で提案したように、呼び出し演算子&を使用します スペースと引用符を含むパラメーターを使用してPowerShellでEXEファイルを実行する方法

& 'path\sqlplus.exe' 'system/password@dbase as sysdba'

スペースがあるため、ユーザー名とパスワードを引用符で囲みました。

スクリプトを開始するには、次のように別のパラメーターを追加します。

 & 'path\sqlplus.exe' 'system/password@dbase as sysdba' '@my_script.sql'

ORA-12154エラーが発生し、他のユーザーが接続を確立していることがわかっている場合(これは、データベース・リスナーが正しく実行されていることを意味します)。次に、SQL * Plusが私のtnsnameファイルを見つけることができるかどうかを調べます。

私の最初のタスクは、Windowscmd.exeで次のようにtnspingできるかどうかを確認することです。

tnsping orcl

接続できる(または確立できない)ことを確認します。

できない場合は、環境変数Oracle_HOMEが設定されているかどうかを確認します。 SQL * Plusは、これを使用してtnsname.oraファイルを検索します。

設定されていない場合は、PowerShellで次のステートメントを実行します(この環境変数を確立するため)。

[Environment]::SetEnvironmentVariable("Oracle_HOME", "C:\app\Administrator\product\11.2.0\client_1" , "User")

次に、(上記で特定された)tnspingを再試行します。

成功したら、上記のスクリプト実行コマンドの実行を再試行します。

10
Patrick Bacon

Windows PowerShellコマンドプロンプトで、コードに変数の設定や特別なものは必要ありません。これを行うだけです:

sqlplus ElBankoUser\SupaSecretyPass "@C:\Users\ElBankoUser\Documents\MaFancySckrp.sql"

1
Paul

私はこれを使用します:

$cmd = "cmd.exe"
$args = ("/c sqlplus {0}/{1}@{2}:{3}/{4} @{5} {6}" -f $userName, $password, $tnsAlias, $port, $dbInstance, $sqlScript, $outputFileName)
&$cmd $args 
0
Vik

。NET Oracleライブラリ DLLを使用できます。必要なDLLファイルがlibフォルダの下にあることを確認してください。

Add-Type -Path "lib\Oracle.ManagedDataAccess.dll"

$query = "select  1 as Col1, 2 as Col2, 3 as Col3 from dual
          union
          select  4 as Col1, 5 as Col2, 6 as Col3 from dual
          union
          select  7 as Col1, 8 as Col2, 9 as Col3 from dual"

$cn   = New-Object Oracle.ManagedDataAccess.Client.OracleConnection -ArgumentList "TNS-ConnectionString-Here"
$cmd  = New-Object Oracle.ManagedDataAccess.Client.OracleCommand    -ArgumentList $query

$cmd.Connection = $cn

try {
    $cn.Open()

    $reader = $cmd.ExecuteReader()

    while ($reader.Read()) {
        $col1 = $reader["Col1"]
        $col2 = $reader["Col2"]
        $col3 = $reader["Col3"]

        Write-Host $col1, $col2, $col3
    }

} catch {
    Write-Error $_.Exception.Message
} finally {
    $cmd.Dispose()
    $cn.Dispose()
}
0
ostati