带有空行和多行注释的 Oracle SQL*Plus 错误

Posted

技术标签:

【中文标题】带有空行和多行注释的 Oracle SQL*Plus 错误【英文标题】:Oracle SQL*Plus error with blanklines and multiple lines comments 【发布时间】:2011-08-17 13:41:24 【问题描述】:

我正在尝试使用作为 VIEW 的 SQL*Plus(命令行)执行查询。 SQL*Plus 不支持新行或多行 cmets ( /* -- */ )。

当我运行set sqlblanklines on时,它返回一个错误:

SQL> set sqlblanklines on
unknown SET option beginning "sqlblankli...".

所以我运行了“帮助设置”,它说命令 sqlblanklines(带有星号)不受 isql 支持,但我确实在使用 SQL*Plus。

我不知道如何摆脱它,这几天我一直在煎熬我的大脑......

谢谢你的建议!!!


更多细节

版本是 8.0.6.0.0。

我正在从文件运行脚本。它显示了许多这样的错误:

SQL> start /tmp/sql/pti/APPS.DIBVWIP001.sql 

错误是这样的

   unknown command beginning "and msi.i..." - rest of line ignored. 
   unknown command beginning "and msi.o..." - rest of line ignored. 
   unknown command beginning "and bic.c..." - rest of line ignored. 
   unknown command beginning "and bbm.b..." - rest of line ignored. 
   For a list of known commands enter HELP and to leave enter EXIT. 

在该块之前有一个空行.. 这就是重点。我无法从脚本中删除空行。

【问题讨论】:

尝试运行查询时遇到什么错误? 您运行的是什么版本的 SQLPlus?您是直接在 SQL 中输入查询Plus 还是调用脚本? 您知道不允许使用内联 cmets 吗?见:download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch5.htm 嗯,版本是8.0.6.0.0。我正在从文件运行脚本。它显示了许多错误,例如“SQL> start /tmp/sql/pti/APPS.DIBVWIP001.sql 未知命令开头“和 msi.i...” - 其余行被忽略。未知命令开始“和 msi.o.. ." - 忽略行的其余部分。以 "and bic.c..." 开头的未知命令 - 忽略行的其余部分。以 "and bbm.b..." 开头的未知命令 - 忽略行的其余部分。对于已知命令的列表输入 HELP 并离开输入 EXIT。” - 在该块之前有一个空行.. 这就是重点。我无法从脚本中删除空行.. =S 这篇文章,Kevin,告诉我可以评论一个内联或多行... 【参考方案1】:

您正在使用该软件的 版本。因此,查看现代版本的手册并不好。如果您咨询the SQL*Plus User's Guide for Oracle 8.0.5,您会发现 SET 不支持 SQLBLANKLINES,这是错误消息告诉您的。

我不确定为什么多线 cmets 让您感到悲伤:根据应该支持的文档。但是,SQL*Plus(尤其是旧版本)对我们放置 cmets 的位置很敏感。它不喜欢在 DDL 命令中放置得太早的 cmets。所以如果你正在做这样的事情......

create  
/*  this is a comment
    which spans several lines
    oh yes
*/
or replace view my_view as select * from dual
/

...您可能会遇到一些问题(尽管它在 11g 中运行良好)。

【讨论】:

感谢您的回复。查看表单编译结果的标题:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options PL/SQL Version 8.0.6.3.0 (Production) - Oracle 是 10g,但 SQL*Plus 的版本似乎是 8。对吗? @Marcio - 数据库是服务器应用程序,而 SQLPlus 是客户端应用程序。所以它们完全有可能不同步;事实上,这在大型组织中几乎是不可避免的 :( 数据库经过认证可以向后兼容旧版本的 SQLPlus。(相反的情况并非如此,客户端的高级版本可能无法与旧版本的数据库。)

以上是关于带有空行和多行注释的 Oracle SQL*Plus 错误的主要内容,如果未能解决你的问题,请参考以下文章

sql注释的多行注释

统计代码文件中的实际有效行数,去掉空行单行注释多行注释

多行和空白/空行的 SQL 解码或最大值

oracle:只删除空行

linux 如何将一行注释掉

MySql和Sql的单行注释和多行注释的区别