SP2-0734:未知命令开始选择

Posted

技术标签:

【中文标题】SP2-0734:未知命令开始选择【英文标题】:SP2-0734: unknown command beginning select 【发布时间】:2020-01-21 15:50:50 【问题描述】:

我在 Azure DevOps 服务器 2019(前 TFS)上构建了持续的自动化应用程序部署。部署的一部分是检查 Oracle DB 状态,在运行脚本之前,下面的脚本工作了一年,并且(可能在最新的 Azure DevOps 服务器更新 2019.1 之后)它停止工作并出现错误:

SQL> SP2-0734: unknown command beginning " select..." - rest of line ignored. 
SQL> SP2-0734: unknown command beginning " select..." - rest of line ignored. 
$chekdbsql = 'select status from v$instance;'
$i = 1
$chkdb = ""
while ($chkdb.Contains("OPEN") -ne 'True')  
    Clear-Variable -Name chkdb
    $chkdb = ($chekdbsql | cmd /c "sqlplus -s user/password@localhost/ora as sysdba")
    if ($chkdb.Contains("OPEN") -eq 'True')
        break 
        
    echo "Trying to connect to database. Attempt $i"
    sleep 10
    $i++  
write-host "Connected! Database's status is 'open'." -ForegroundColor green

如果我尝试在构建应用程序的机器上本地执行命令 - 它运行良好。

【问题讨论】:

【参考方案1】:

select 之前的空格让我觉得这是字符编码问题。参见例如this, this

beginning " select..."

我对 powershell 不够熟悉,不知道问题出在哪里。我可以想到一个解决方法,但它有点像 hack。

$chekdbsql = "`nselect status from v`$instance;"

这可以确保在字符串开头插入的任何垃圾字符都将在 SQL*Plus 中的自己的行上。因此,如果您获得 SP2-0734,您的选择命令仍将在此之后运行。因为它现在是一个双引号字符串,所以我转义了 $

【讨论】:

以上是关于SP2-0734:未知命令开始选择的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CONCAT 解决 SQL Plus 中的 SP2-0734?

未知命令开始“管理......”

插入时出现 Oracle 错误 SP2-0734

为啥sqlplus / as sysdba登陆oracle时报一串SP2-0734的错误,SP2-0734: unknown command beginning "

在sql plus 中,运行dbms_output.put时提示SP2-0734: unknown command beginning 请问是何缘故?

sql navigator 使用哪种技术来执行命令? [关闭]