2015-12-03 89 views
0

目前,我已經寫入新的ASP文件,通過cn.Execute加載數據庫到數據庫的方法。由於特殊字符SQL執行功能失敗經典ASP

但是,它會引發下面的錯誤,

ORA-06550:行1,列616:PL/SQL:ORA-00917:錯過逗號 ORA-06550:行1,列359:PL/SQL:SQL語句被忽略 ORA-06550:第1行,第717列:PLS-00103:遇到符號 「文件結束」時期待以下操作之一:

之後,我發現,在字段的值(如CHR(237)CHR(233))中的一個特殊字符。但是,我能夠通過sqlplus運行相同的查詢,能夠運行查詢。

請幫我解決這個問題。

+0

你已經發現問題了。我們無法前往您的工作場所爲您刪除文件結尾字符。清理你的代碼。而'我能夠通過sqlplus運行相同的查詢'並不是理由,這與您在ASP中使用的解釋器/驅動程序不同。我並不是想要表達自己的意思,但似乎你正在對你的代碼固執而不會注意到它。 =) –

+0

@ Ricardo ..謝謝。但是,我需要這裏的幫助是我不能去替換那些特殊字符(替換命令)。因爲我以批處理模式加載數據,所以查詢是動態派生的。我發現這兩個特殊字符現在在我的數據中。我可以手動處理它們。將來,我想處理所有的例外情況。再次感謝。 – msiva1989

+0

還有一點意見要補充,Oracle可以接受這些值。只有我的Vbscript沒有處理這個字符。我已經將字符集更改爲unicode-8,它沒有工作。 – msiva1989

回答

0

您不能在SQL語句中執行特殊/控制字符。語句在執行前經過分析和驗證,如果語句無效,則會引發異常。

這是許多可能的方法之一。

[...] 
sqlStatement="SELECT foo FROM bar WHERE dar = 'stuff' " 

sqlStatement = strClean(sqlStatement) 

Set recordset = connection.Execute (sqlStatement, RecordsAffected, Options) 
[...] 



Function strClean (strtoclean) 
Dim objRegExp, outputStr 
Set objRegExp = New Regexp 

objRegExp.IgnoreCase = True 
objRegExp.Global = True 
objRegExp.Pattern = "((?![a-zA-Z0-9]).)+" 
outputStr = objRegExp.Replace(strtoclean, "-") 

objRegExp.Pattern = "\-+" 
outputStr = objRegExp.Replace(outputStr, "-") 

strClean = outputStr 
End Function 

從替換功能: http://www.code-tips.com/2009/04/vbscript-string-clean-function-remove.html

在您的特定情況下,在錯誤的基礎觀察。

ORA-06550:行1,列616:PL/SQL:ORA-00917:錯過逗號 ORA-06550:行1,列359:PL/SQL:SQL語句忽略 ORA-06550:線1,列717:PLS-00103:遇到符號 「文件結束」時,期待以下某項操作:

通過打印傳遞給'execute'的SQL語句的內容來調試您的語句。

此外,檢查「第1行,第359列」,您在那裏缺少逗號(或SQL語句中的其他錯誤令解析器混淆)。