我正在尝试使用PowerShell登录Oracle数据库并运行一个名为“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-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“
答案 0 :(得分:10)
我使用调用运算符&
,正如Keith Hill提出的问题How to run an EXE file in PowerShell with parameters with spaces and quotes。
& 'path\sqlplus.exe' 'system/password@dbase as sysdba'
由于空格,我将用户名,密码放在引号中。
要启动脚本,我按如下方式添加另一个参数:
& 'path\sqlplus.exe' 'system/password@dbase as sysdba' '@my_script.sql'
如果您收到ORA-12154错误,并且您知道其他用户有错误 已建立的连接(这意味着数据库侦听器正在运行 正确);然后我会检查SQL * Plus是否可以找到我的tnsname文件。
我的第一个任务是看看我是否可以在Windows cmd.exe中进行如下操作:
tnsping orcl
它将确认连接可以(或不能建立)。
如果不能,我会检查一下环境变量ORACLE_HOME, 已设定。 SQL * Plus使用它来查找tnsname.ora文件。
如果未设置,我将在PowerShell中执行此语句(以建立 这个环境变量):
[Environment]::SetEnvironmentVariable("ORACLE_HOME", "C:\app\Administrator\product\11.2.0\client_1" , "User")
接下来,我会重试tnsping(上面已确定)。
一旦成功,我会重新尝试执行上面的脚本运行命令。
答案 1 :(得分:1)
在Windows PowerShell命令提示符中,代码不需要变量设置或任何花哨的东西。就这样做:
sqlplus ElBankoUser\SupaSecretyPass "@C:\Users\ElBankoUser\Documents\MaFancySckrp.sql"
答案 2 :(得分:0)
我用这个:
$cmd = "cmd.exe"
$args = ("/c sqlplus {0}/{1}@{2}:{3}/{4} @{5} {6}" -f $userName, $password, $tnsAlias, $port, $dbInstance, $sqlScript, $outputFileName)
&$cmd $args
答案 3 :(得分:0)
您可以使用.NET Oracle library DLL,只需确保在lib
文件夹下有所需的DLL文件
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()
}
答案 4 :(得分:0)
为什么不使用它?
sqlplus -s $ admin登录“ @C:\ Users \ Administrator \ Desktop \ oracle \ OracleCleanTest.sql”
-s只显示sqlplus横幅。