2016-01-21 30 views
0

选择我尝试运行此片段(如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) 
} 

蟾蜍我可以选择V $锁定,但在我的剧本我有ansver喜欢

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

问题的原因在哪里?

+2

这里的问题是无论是与用户 - 如果该用户简化版,拥有从该表或的''$转义为选择的权利符号。我不知道PS如何处理这个角色。在unix shell中,我们必须将其转义,所以它会是'v \ $ lock'。 – stee1rat

+0

谢谢你!你有权利,我的错误 – Asiek

回答

1

Powershell的认为你是指可变$lock这句话,而不是字符串literial 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 
0

您需要转义spesial字符或使用文字字符串。 $用于变量。

尝试

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

或者

$q = 'select * from v$lock'