【发布时间】:2018-07-02 21:21:40
【问题描述】:
我有一堆要使用 ant 执行的 sql 脚本(一些 sql 和一些 plsql)。 在开始执行之前,我需要确保文件是可执行的。所以我运行以下目标来从 ant 创建 sql 和 plsql 可执行文件。
<copy todir="${migration.scripts.dir}\temp\">
<fileset dir="${migration.scripts.dir}" includes="*.sql"/>
<filterchain>
<replaceregex byline="false" pattern=";" replace="${line.separator}/" flags="mg"/>
<replaceregex byline="false" pattern="/[\s]*/" replace=";${line.separator}/" flags="mg"/>
</filterchain>
</copy>
而PLSQL在一个文件中的一个文件是这样的-
BEGIN
FOR c IN
--query
LOOP
dbms_utility.blah ;
END LOOP;
COMMIT;
END;
/
当 ant 目标 makeExecutableSQLs 运行输出时 -
BEGIN
FOR c IN
--query
LOOP
dbms_utility.blah
/
END LOOP
/
COMMIT
/
END
;
/
但是由于此错误,稍后运行时会失败-
从第 1 行开始的错误命令 - 开始 为 c 输入 - 询问 环形 dbms_utility.blah 错误报告 - ORA-06550:第 9 行,第 135 列: PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:
:= . ( % ; 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action: Error starting at line : 11 in command - END LOOP Error report - Unknown Command Commit complete. Error starting at line : 15 in command - END Error report - Unknown Command Error starting at line : 16 in command - Error report - Unknown Command
无法指出错误在哪里?
【问题讨论】:
-
您是在问为什么会出现 PL/SQL 错误,或者为什么
pattern=";" replace="${line.separator}/"会破坏 PL/SQL(从而导致这些错误)? -
我知道 replace="${line.separator}/" 导致“增强”脚本出错。但是对于 SQL 来说效果很好。但是现在我想知道为什么会抛出这个 PLSQL 错误。
-
PL/SQL 语言使用
;作为命令终止符,而不是/,它是除法运算符。显然,挑战将是阻止您的 Ant 脚本通过向其中注入无效字符来弄乱您的 PL/SQL。不过我不认识 Ant,所以也许这真的很难。