我尝试运行此片段(作为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
问题的原因在哪里?
答案 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"