从powershell中的v $ lock中选择

时间:2016-01-21 06:10:19

标签: sql oracle powershell

我尝试运行此片段(作为sys / as sysdba):

    try{
$conn = New-Object Data.Odbc.OdbcConnection
$conn.ConnectionString= $connectionString
$conn.open();
$q =  "select * from v$lock ";    
$reader = (new-Object Data.Odbc.OdbcCommand($q,$conn)).ExecuteScalar();
Write-Host $reader 

$conn.close()
} catch {

 Write-Host ( $_.Exception.Message )
}

在toad上我可以选择v $ lock,但在我的脚本中我有像

这样的人
    Exception calling "ExecuteScalar" with "0" argument(s): "ERROR [42S02] [Oracle][ODBC][Ora]ORA-00942: table or view does not exist

问题的原因在哪里?

2 个答案:

答案 0 :(得分:1)

Powershell认为您在此声明中引用变量$lock而不是字符串升级v$lock

$q =  "select * from v$lock ";

您必须使用反引号$转义`符号,或使用不扩展变量的单引号。更重要的是,惯用的Powershell并没有使用分号作为语句终止符。像这样,

$q =  'select * from v$lock '  # Single quotes don't expand variables
$q =  "select * from v`$lock " # Backtick escapes $ not to be a variable symbol

答案 1 :(得分:0)

您需要转义特殊字符或使用文字字符串。 Role用于变量。

尝试

$

$q =  "select * from v`$lock"