JavaScript 如何将 Oracle SQLPlus 脚本标记为单独的语句

How to tokenize a Oracle SQLPlus script into individual statements in JavaScript

我需要处理通常由应用程序中的 Oracle SQLPlus 处理的脚本内容。

脚本包含如下块:

而且我需要单独执行各个块。

是否有一种相当简单的方法来标记 JavaScript 中的语句,或者我是否需要一个完全理解 SQLPlus 语法的完整标记器?

最简单的方法是假设 SQL 脚本是以合理可读的方式编写的,并且每行有 1 个语句,或者语句被分成多行,你不会有一行中有多个语句的情况。

大多数情况可以通过以下方式处理:

阅读下一行和trim任何前导白色-space:

  • 如果它以 SETCOLUMN 开头,那么您有一个 SQL/Plus 指令,它(通常)由一行组成;那一行是你的声明。
  • 如果它以 CREATE FUNCTIONCREATE PROCEDURECREATE PACKAGEDECLAREBEGIN 开头(以及后面的白色-space 字符) 然后你将有一个 PL/SQL 块,它将在单独的一行上以 / 终止,你可以阅读行直到找到它,这就是你的完整语句。
  • 如果它以 -- 开头,那么它是一条注释,您可以跳过该行的其余部分并将其添加到下一条语句之前(因为注释是下一条语句的一部分)。
  • 如果它以 /* 开头,那么它是一个内联注释,您可以阅读到下一个 */,然后通过处理该行的其余部分来重复(注释将被添加到下一条语句)。
  • 否则,请阅读到行尾的下一个 ;(或后跟注释)(或单独一行的 /),这就是您的完整陈述。

然后重复,阅读下一行。

这不能保证在 100% 的情况下都有效(即,如果你有多行字符串文字,而恰好在文字中一行的末尾有一个 ;)。您应该查看输出以查看是否有任何其他情况需要处理,但对于相对简单的脚本来说它应该可以工作。

如果您的开发人员喜欢在同一行上编写包含多个语句的(可读性较差)脚本,那么您可能需要实现一个解析器。