如何在PowerShell中运行SQL Plus脚本

use*_*435 8 sql oracle powershell sqlplus

我正在尝试使用PowerShell登录Oracle DB并运行名为"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
Run Code Online (Sandbox Code Playgroud)

我也试过这个.

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

sqlplus.exe -d $database -U $user -P $pw -I "@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql"
Run Code Online (Sandbox Code Playgroud)

我试过这个.

& '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'
Run Code Online (Sandbox Code Playgroud)

我收到错误,"&:模块'sqlplus'无法加载.有关更多信息,请运行'Import-Module sqlplus'.在行:5 char:3 +&$ mydata Invoke-SqlPlus -inputfile"@C:\Users\Administrator\Desktop\oracle\Orac ... + ~~~~~~~ + CategoryInfo:ObjectNotFound:(sqlplus\sql/manager @ ORCL:String)[],ParentContainsErrorRecordException + FullyQualifiedErrorId:CouldNotAutoLoadModule"

Pat*_*con 10

我使用调用操作符,&正如Keith Hill提出的问题,如何在PowerShell中使用带空格和引号的参数运行EXE文件.

& 'path\sqlplus.exe' 'system/password@dbase as sysdba'
Run Code Online (Sandbox Code Playgroud)

由于空格,我将用户名,密码放在引号中.

要启动脚本,我添加另一个参数,如下所示:

 & 'path\sqlplus.exe' 'system/password@dbase as sysdba' '@my_script.sql'
Run Code Online (Sandbox Code Playgroud)

如果您收到ORA-12154错误,并且您知道其他用户已建立连接(这意味着数据库侦听器正在正常运行); 然后我会检查SQL*Plus是否可以找到我的tnsname文件.

我的第一个任务是看看我是否可以在Windows cmd.exe中进行如下操作:

tnsping orcl
Run Code Online (Sandbox Code Playgroud)

它将确认连接可以(或不能建立).

如果不能,我会检查是否设置了环境变量ORACLE_HOME.SQL*Plus使用它来查找tnsname.ora文件.

如果未设置,我将在PowerShell中执行此语句(以建立此环境变量):

[Environment]::SetEnvironmentVariable("ORACLE_HOME", "C:\app\Administrator\product\11.2.0\client_1" , "User")
Run Code Online (Sandbox Code Playgroud)

接下来,我将重试tnsping(上面确定).

一旦成功,我会重新尝试执行上面的脚本运行命令.