如何在sqlplus执行查询时忽略字符串内的特殊字符#?
问题原因
你遇到的SP2系列报错是SQLPlus客户端自身触发的错误,此时SQL语句还未发送到Oracle数据库执行。
SQLPlus默认将行首的#识别为内部命令的前缀,你提交的INSERT语句中,字符串内容换行后行首的#foreach、#end被SQL*Plus误判为要执行的内部命令,因此抛出未知命令的错误。而SQL Developer没有该识别规则,所以可以正常执行语句。
解决方案
方案1:禁用SQL*Plus前缀识别(最推荐)
在执行INSERT语句前,先在SQL*Plus会话中执行命令:SET SQLPREFIX OFF该命令会关闭SQLPlus对前缀字符的识别逻辑,当前会话永久生效,之后直接执行你的INSERT语句即可正常运行。如果需要全局永久生效,可以将该命令添加到SQLPlus的全局配置文件
glogin.sql中。方案2:调整语句格式避免#出现在行首
不需要修改SQLPlus配置,只需要调整INSERT语句的换行规则,要么给行首的#前面加一个空格,要么调整换行位置不让#出现在行首,SQLPlus就不会将其识别为命令前缀。方案3:将INSERT语句合并为单行
把整个INSERT语句的内容合并为一行编写,不存在换行后行首为#的情况,自然不会触发SQL*Plus的命令识别逻辑。
内容的提问来源于stack exchange,提问作者Balt
相关产品推荐
相关产品推荐

